[解決済み] Map.clear() vs new Map : どっちがいいんだろう?重複
質問
という構文の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()
メソッドを使用します。
とにかく、両方のバリエーションを試して、測定してみましょう。必ず測定してください!
関連
-
アクセス制限です。タイプ 'Application' は API ではない(必要なライブラリに制限がある)。
-
javaの非静的メソッドを静的に参照することができない
-
ジャバアレイ
-
eclipse にリソースリーク:'in' が閉じない
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで新しいListを作成する方法
-
[解決済み] .Any() vs .Count() > 0のどちらのメソッドがより良いパフォーマンスを発揮しますか?
-
[解決済み】静的なMapを初期化する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
Java Runtime Environmentを継続するためのメモリが不足しています。
-
Zipファイルの圧縮・解凍にantを使用する
-
[解決済み】Javaでfinalize()メソッドが呼ばれるのはいつ?
-
[解決済み] list.clear() vs list = new ArrayList<Integer>(); [duplicate].