2013-07-10 37 views
3

標的數據結構有關的ArrayList底層數據結構是數組,對於鏈表它是鏈接對象和HashMap的或哈希表它可以是鏈表或樹數組,什麼是爲HashSet的

+3

jdk源代碼可以通過openjdk項目公開獲得,爲什麼不爲自己找到答案? – jtahlborn

+0

@jtahlborn它不是一個用JDK源代碼挖掘的遊戲,如果你可以玩,那你爲什麼不回答它? – Mihir

+0

爲什麼投下來? – Mihir

回答

5

根據the Javadoc爲HashSet的背襯數據結構是HashMap中。

的JDK 1.6代碼驗證此:

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

散列的幼稚的想法是將元素存儲到在計算爲一個位置索引的陣列如下:

  • 獲得元件的element_hash_code通過處理元素的 數據並生成一個整數值(「哈希」 元素的概念大致意味着「磨碎」)
  • 使用簡單的模塊操作配給映射到陣列的範圍

所以這些可以通過數組或鏈表完成。

在Java HashSet使用HashMap內部

從源代碼

public HashSet() { 
    map = new HashMap<E,Object>(); 
} 
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; 
...