消息关闭
    暂无新消息!

hashmap put方法问题

问题作者 : Mawhinney2017-06-14发布
public V put(K key, V value) {
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key);
        int i = indexFor(hash, table.length);
        for (Entry<K,V> e = table; e != null; e = e.next) {
            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;
    }
 void addEntry(int hash, K key, V value, int bucketIndex) {
    if ((size >= threshold) && (null != table)) {
        resize(2 * table.length);
        hash = (null != key) ? hash(key) : 0;
        bucketIndex = indexFor(hash, table.length);
    }

    createEntry(hash, key, value, bucketIndex);
}   
 void createEntry(int hash, K key, V value, int bucketIndex) {
        Entry<K,V> e = table;
        table = new Entry<>(hash, key, value, e);
        size++;
    }

如果put 键索引相同key不同的元素,addEntry()怎么保存元素到链表尾部,createEntry()方法?

1个回答

︿ 2
没太明白你的意思, 如果是key相同,value会覆盖的。