0

ハッシュマップを使用して、時間とともに進化するキーを持つオブジェクトを格納しています。

HashMap<String,Stuff> hm = new HashMap<String,Stuff>()
Stuff stuff = new Stuff();
hm.put( "元のキー", もの);

「OrigalKey」を削除して、同じオブジェクトを持つ新しいエントリを put() するよりも優れたものは見つかりませんでした。

hm.remove("オリジナルキー");
hm.put("NewKey", stuff);

remove() はかなりの CPU 使用料を取っているように見えるので、私の質問:

  1. 重複するエントリを残すための実際のメモリ コストはいくらですか (重複するリスクはありません)。
  2. きちんとした swapKey() メソッドが欠けているだけですか?
4

2 に答える 2

5

重複するエントリを残すための実際のメモリ コストはいくらですか (重複するリスクはありません)。

余分なエントリがあり、キー自体はガベージ コレクションできません。キーが「大きい」場合、問題になる可能性があります。また、正確なカウントを取得できない、すべての値を賢明に反復処理できないなども意味します。私には悪い考えのように思えます。

きちんとした swapKey() メソッドが欠けているだけですか?

そのようなことはありません - そしてそれは私にとってかなりまれな要件のように感じます. そのようなメソッドは、とにかくあなたがしていることをほとんどしなければなりません.古いキーを見つけて、データ構造から削除し、新しいキーのエントリを挿入する必要があります. 両方の操作を一度に知っているだけでは、可能な最適化を簡単に想像することはできません。

于 2012-06-16T20:12:08.977 に答える