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;
    }

 

posted @ 2012-03-07 16:22  lostyue  阅读(463)  评论(0编辑  收藏  举报