HashSet的基础数据结构

时间:2013-07-10 04:12:44

标签: java

对于ArrayList,基础dataStructure是Array,对于LinkedList,它是Link对象,对于HashMap或HashTable,它可以是LinkedList或Tree的数组,HashSet中使用的数据结构是什么

4 个答案:

答案 0 :(得分:5)

根据the Javadoc,HashSet的后备数据结构是HashMap。

JDK 1.6代码验证了这一点:

public HashSet() {
    map = new HashMap<>();
}

答案 1 :(得分:5)

散列的天真想法是将一个元素存储到一个数组中,位置索引计算如下:

  • 通过处理元素来获取元素的element_hash_code 数据和生成一个整数值(“散列”的想法 元素大致意味着“磨砺”)
  • 使用简单的mod操作映射到数组的范围

所以这些可以通过数组或链表来完成。

在java中,HashSet在内部使用HashMap

来自源代码

public HashSet() {
    map = new HashMap<E,Object>();
}

答案 2 :(得分:2)

HashSet在内部使用HashMap存储数据。我相信HashMap是一个Entry对象数组。

了解HashMap内部结构的相关文章:

https://stackoverflow.com/questions/11596549/how-does-javas-hashmap-work-internally

答案 3 :(得分:0)

HashMap和HashSet(基于HashMap)的底层数据结构是哈希表http://en.wikipedia.org/wiki/Hash_table。在HashMap源代码中,它看起来像一个Entrys数组

Entry<K,V>[] table;

... 

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