7

なぜHashSet uses HashMapTreeSetuses TreeMapLinkedHashSetuses がLinkedHashMap舞台裏で内部的に使用されるのだろうか? キーを運んで保存するだけなのでSet、経済的ではないような余分なメモリスペースを使用していませんか?

Entry持つ内部クラスHashMapは次のとおりです

class Entry<K,V> implements Map.Entry<K,V> {
    final K key;
    V value;
    Entry<K,V> next;
    final int hash;
    ...
    ....
}

V valueSet の場合、実際にはその変数は必要ありませんよね?内部で map オブジェクトを使用する利点と主な理由は何ですか?

4

2 に答える 2

11

少ないコード、少ないバグ、少ないテスト。

同じコードを再利用することで、最適化、デバッグ、テストを 1 回行うだけで済みます。メモリのオーバーヘッドは最小限です。各エントリの別のポインタであり、キーと比較すると無視できます。

于 2012-09-14T20:34:04.193 に答える
3

Map を使用するとコードが簡素化されますが、メモリ使用量がわずかに増加します。オーバーヘッドがすでに高いため、考えているほどではありません。;)

すべてのマップにセットがあるわけではなく、以下を使用できます。

Set<T> set = Collection.newSetFromMap(new ConcurrentHashMap<T>());
Set<T> set = Collection.newSetFromMap(new ConcurrentSkipListMap<T>());
Set<T> set = Collection.newSetFromMap(new IdentityHashMap<T>());
于 2012-09-14T20:33:46.753 に答える