为什么Java中的Set数据结构在内部使用Map?

pet*_*ter 6 java hashmap set hashset

我想知道为什么HashSet在场景后面内部使用HashMap,TreeSet使用TreeMapLinkedHashSet使用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;
    ...
    ....
}
Run Code Online (Sandbox Code Playgroud)

对于Set我们真的不需要那个V value变量,对吗?那么内部使用地图对象的好处和主要原因是什么?

zmb*_*mbq 11

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

通过重用相同的代码,您只需要优化,调试和测试一次.内存开销很小 - 每个条目的另一个指针,与Key相比可忽略不计.

  • 伙计们,一个Set提供的*interface*与Map提供的界面完全不同.使用Map实现Set的事实实际上只是一个技术性问题. (2认同)