1

LinkedHashMap/Set は Collection へのエントリの順序を保持するため、パフォーマンスが少し低下します。なぜこれが起こるのか知りたいです。

4

3 に答える 3

6

LinkedHash[Map/Set]二重にリンクされたリストを使用して、エントリの順序を追跡します。したがって、要素が追加されるたびに、新しい DLL ノードを作成する必要があります。割り当てには時間がかかり、いくつかの追加のポインターを設定する必要があります。

于 2012-04-08T15:51:45.690 に答える
1

問題は、LinkedHash[マップ/セット] がリンクされていない対応物よりも常にパフォーマンスが悪いという無効な仮定を立てていることです。

LinkedHash[Map/Set] には、リンクされたリストを形成するために使用されるポインターを維持するという追加のタスクがあります。これは、追加または削除を実行するときに、Hash[Map/Set] よりもパフォーマンスがわずかに悪いことを意味します (それでも一定時間です)。

ただし、LinkedHash[Map/Set] を反復処理する場合、パフォーマンスはセットのサイズに比例しますが、リンクされていない対応物はセットの容量に比例します。Hash[Map/Set] を反復処理するときの最良のシナリオは、容量がすべての要素に適合するのに十分な大きさ (つまり、容量 = サイズ) の場合であり、そのような場合でも同じパフォーマンスが得られます。また、非常に静的なセット/マップがあり、容量を設定しない限り、容量が同じサイズになる可能性は低いことに注意してください。

したがって、マップ/セットの構築のパフォーマンスに関心がある場合は、HashMap または HashSet を選択する必要がありますが、そのマップ/セットの反復処理に関心がある場合は、LinkedHashMap または LinkedHashSet を選択してください。

参照: http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html

于 2013-03-12T00:46:11.027 に答える
0

LinkedHashMap/Setには、ハッシュ テーブルとリンク リストの 2 つのデータ構造が含まれているため、挿入操作と削除操作によって 2 つのデータ構造が変更されますが、単純なHashMap操作では 1 つのデータ構造 (ハッシュ テーブル) のみが変更されます。LinkedHashMap/Setが遅くなり、より多くのメモリを消費するのはそのためです。

于 2012-04-08T15:53:35.780 に答える