HashMap put get方法
1 public V put(K key, V value) {
2 if (key == null)
3 return putForNullKey(value);//处理Null值
4 int hash = hash(key.hashCode());//获得Hashcode再处理
5 int i = indexFor(hash, table.length);//获得该值在数组中的位置
6 for (Entry<K,V> e = table[i]; e != null; e = e.next) {
7 Object k;
8 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {//如果键值重复,则覆盖
9 V oldValue = e.value;
10 e.value = value;
11 e.recordAccess(this);
12 return oldValue;
13 }
14 }
15
16 modCount++;//更新修改次数
17 addEntry(hash, key, value, i);//插入值,如果i所在的位置有值,则将该值放到新插值的后面,新插入的值有一个Next指针指向他。
18 return null;
19 }
get
public V get(Object key) { if (key == null) return getForNullKey();//返回null值对象 int hash = hash(key.hashCode());//取得hash值 for (Entry<K,V> e = table[indexFor(hash, table.length)];//取得在数组中的位置 e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k)))//在该位有值,而且key对象不一样,继续在该链表中向下寻找 return e.value; } return null; }
feiyue3008