为什么在Java中使用的地图在内部设置数据结构?(Why do Set data structure

2019-09-22 10:43发布

我想知道为什么HashSet的使用HashMapTreeSet使用TreeMap ,和LinkedHashSet使用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 value变量,是否正确? 那么,有什么好处和使用内部地图对象的主要原因是什么?

Answer 1:

更少的代码,更少的错误,更少的测试。

通过重复使用相同的代码,你只需要优化,调试和一次测试。 内存开销是最小的 - 另一个指针为每个条目,可以忽略不计相比密钥。



Answer 2:

使用地图简化了代码,只是稍稍提高了内存使用情况。 如你想象的那么开销已经很高了它没有那么多。 ;)

并非所有的地图都设置,你可以使用下面的。

Set<T> set = Collection.newSetFromMap(new ConcurrentHashMap<T>());
Set<T> set = Collection.newSetFromMap(new ConcurrentSkipListMap<T>());
Set<T> set = Collection.newSetFromMap(new IdentityHashMap<T>());


文章来源: Why do Set data structures in Java use Map internally?