初學hashmap資料結構2
阿新 • • 發佈:2018-11-07
remove方法
public V remove(Object key) { Entry<K,V> e = removeEntryForKey(key); //返回與key相同的前一個值, return (e == null ? null : e.value); } final Entry<K,V> removeEntryForKey(Object key) { int hash = (key == null) ? 0 : hash(key.hashCode()); //計算hash值 int i = indexFor(hash, table.length); //算出hash值在table中的索引 Entry<K,V> prev = table[i]; //獲取索引值 Entry<K,V> e = prev; while (e != null) { Entry<K,V> next = e.next; Object k; if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) { modCount++; //hashmap結構變化加1 size--;// 大小減1 //如果匹配到,則將以一個值移到這裡,hashmap資料結構為陣列加連結串列 if (prev == e) table[i] = next; else prev.next = next; e.recordRemoval(this); return e; } prev = e; e = next; } return e; } //hashmap判斷是否包含其中一個值 public boolean containsValue(Object value) { if (value == null) return containsNullValue(); Entry[] tab = table; for (int i = 0; i < tab.length ; i++) for (Entry e = tab[i] ; e != null ; e = e.next) if (value.equals(e.value)) return true; return false; } //清空操作是將每個物件設定為null,陣列大小設定為0 public void clear() { modCount++; Entry[] tab = table; for (int i = 0; i < tab.length; i++) tab[i] = null; size = 0; }