集合框架-HashSet集合的add()方法的原始碼
interface Collection {
...
}
interface Set extends Collection {
...
}
class HashSet implements Set {
private static final Object PRESENT = new Object();
private transient HashMap<E,Object> map;
public HashSet() {
map = new HashMap<>();
}
public boolean add(E e) { //e=hello,world
return map.put(e, PRESENT)==null;
}
}
class HashMap implements Map {
public V put(K key, V value) { //key=e=hello,world
//看雜湊表是否為空,如果空,就開闢空間
if (table == EMPTY_TABLE) {
inflateTable(threshold);
}
//判斷物件是否為null
if (key == null)
return putForNullKey(value);
int hash = hash(key); //和物件的hashCode()方法相關
//在雜湊表中查詢hash值
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
//這次的e其實是第一次的world
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
//走這裡其實是沒有新增元素
}
}
modCount++;
addEntry(hash, key, value, i); //把元素新增
return null;
}
transient int hashSeed = 0;
final int hash(Object k) { //k=key=e=hello,
int h = hashSeed;
if (0 != h && k instanceof String) {
return sun.misc.Hashing.stringHash32((String) k);
}
h ^= k.hashCode(); //這裡呼叫的是物件的hashCode()方法
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
}
hs.add("hello");
hs.add("world");
hs.add("java");
hs.add("world");
相關文章
- 集合框架-TreeSet的add()方法的原始碼解析框架原始碼
- Java集合框架原始碼剖析:HashSet 和 HashMapJava框架原始碼HashMap
- Java 集合框架 HashSet 和 HashMap 原始碼剖析Java框架HashMap原始碼
- 集合框架-ArrayList集合的toString()方法原始碼解析框架原始碼
- Java集合原始碼分析(九)——HashSetJava原始碼
- 【集合框架】JDK1.8原始碼分析HashSet && LinkedHashSet(八)框架JDK原始碼
- Java集合原始碼學習(4)HashSetJava原始碼
- 【Java集合原始碼剖析】Java集合框架Java原始碼框架
- Java集合 HashSet的原理及常用方法Java
- 集合框架-HashMap&HashSet&LinkedHshMap框架HashMap
- 集合的toString()方法原始碼解析原始碼
- Java集合系列-HashSetJava
- Java 集合框架------ArrayList原始碼分析Java框架原始碼
- Java集合框架原始碼剖析:ArrayDequeJava框架原始碼
- Java 集合框架 ArrayList 原始碼剖析Java框架原始碼
- 集合框架-HashMap集合的案例框架HashMap
- 搞懂 HashSet & LinkedHashSet 原始碼以及集合常見面試題目原始碼面試題
- 【JAVA集合】JAVA集合框架及其常用方法Java框架
- 使用HashSet<>去除重複元素的集合
- Set集合的具體子類:HashSet
- 集合框架原始碼學習之ArrayList框架原始碼
- 集合框架-Map集合的遍歷框架
- List集合(ArrayList-LinkedList);Set集合(HashSet-TreeSet)
- 集合框架原始碼學習之LinkedList框架原始碼
- Java集合框架之 Java HashMap 原始碼解析Java框架HashMap原始碼
- Java集合框架原始碼剖析:TreeSet 和 TreeMapJava框架原始碼
- 集合框架-集合的巢狀遍歷框架巢狀
- 集合框架-TreeMap集合框架
- 集合框架-Set集合框架
- 集合框架-TreeSet集合框架
- 集合框架-Collection集合框架
- 集合框架-List集合框架
- 集合框架-HashSet儲存字串、自定義物件並遍歷框架字串物件
- 集合框架-HashSet儲存元素保證唯一性的圖解框架圖解
- 集合框架-Arrays工具類的asList()方法(把陣列轉成集合)框架陣列
- 【集合框架】Java集合框架綜述框架Java
- Java集合(5)一 HashMap與HashSetJavaHashMap
- 集合框架-集合總結框架