哈希类集合的三个基本存储概念:
- table,存储所有节点数据的数组
- slot 哈希槽,即 table[i] 的位置
- bucket 哈希桶,即 table[i] 上所有元素形成的表或者树的集合
存储所有节点的table数组
transient Node<K,V>[] table;
描述一个hash节点信息:
static class Node<K,V> implements Map.Entry<K,V> {// hash值final int hash;// 键final K key;// 值V value;// 下一个节点HashMap.Node<K,V> next;Node(int hash, K key, V value, HashMap.Node<K,V> next) {this.hash = hash;this.key = key;this.value = value;this.next = next;}public final K getKey() { return key; }public final V getValue() { return value; }public final String toString() { return key + "=" + value; }// 计算hashcodepublic final int hashCode() {return Objects.hashCode(key) ^ Objects.hashCode(value);}public final V setValue(V newValue) {V oldValue = value;value = newValue;return oldValue;}// 相等性判断public final boolean equals(Object o) {if (o == this)return true;if (o instanceof Map.Entry) {Map.Entry<?,?> e = (Map.Entry<?,?>)o;if (Objects.equals(key, e.getKey()) &&Objects.equals(value, e.getValue()))return true;}return false;}}