1. ホーム
  2. java

[解決済み] Map.clear() vs new Map : どっちがいいんだろう?重複

2022-10-28 10:46:11

質問

という構文のMapを持っています。 Map<String, String> testMap = new HashMap<String, String>(); . このマップには、1000個のデータがあります。

私のアプリケーションが新しいデータのリストを必要とするとき、私はマップをクリアする必要があります。しかし、Map.clear()のコードを見たとき、私は次のように言いました。

/**
     * Removes all of the mappings from this map.
     * The map will be empty after this call returns.
     */
    public void clear() {
        modCount++;
        Entry[] tab = table;
        for (int i = 0; i < tab.length; i++)
            tab[i] = null;
        size = 0;
    }

クリアーメソッドはn回ループすることは承知しています(nはMapのデータ数)。そこで、Mapを以下のように再定義できないかと考えました。 testMap = new HashMap<String, String>(); として再定義し、以前使用していたMapはガーベッジコレクションされるようにする方法があると思いました。

しかし、私はこれが良い方法であることを確信していません。私はモバイルアプリケーションに取り組んでいます。

ご指導いただけないでしょうか?

どのように解決するのですか?

複雑な質問ですね。何が起こるか見てみましょう。

新しいインスタンスを作成し、そのインスタンスは新しい配列でバックされます。そのため、ガベージコレクタは以前のマップからすべてのキーと値をクリアし、自分自身への参照をクリアする必要があります。そのため、O(n)アルゴリズムがとにかく実行されますが、ガベージコレクタのスレッドで実行されます。1000レコードの場合、何の違いも感じないだろう。 しかし、性能は ガイド が教えてくれます。 新しいオブジェクトを作らない方が良い ということです。ですから、私なら clear() メソッドを使用します。

とにかく、両方のバリエーションを試して、測定してみましょう。必ず測定してください!