HashMap

2019-06-22  本文已影响0人  那谁319
image.png
package collection.map;

import java.util.HashMap;
import java.util.Map;

/**
 * @author haishen
 * @date 2019/2/26
 */
public class HashMapTest {
    public static void main(String[] args) {
        Map<String, String> hashMap = new HashMap();
        hashMap.put(null, "1");
        hashMap.put("1", "12");
        hashMap.put("3",null);
        hashMap.get("3");
        System.out.println(hashMap.size());
    }
}
image.png

put操作

image.png

计算key的hash值

image.png image.png

putVal执行逻辑

image.png

扩容逻辑

image.png

解决疑问

解答

get 操作

image.png image.png

replace操作

image.png

remove操作

image.png image.png

遍历操作

        Set keys = hashMap.keySet();
        Iterator ite = keys.iterator();
        while (ite.hasNext()) {
            String key = (String) ite.next();
            System.out.println("key:{" + key + "}--->value:{" + hashMap.get(key) + "}");
        }
image.png image.png image.png

参考:

注意:JDK1.8后,除了对hashmap增加红黑树节点外,对原有造成死锁的关键原因点(新table复制在头端添加元素)改进为依次在末端添加新的元素。虽然JDK1.8后添加红黑树改进了链表过长查询遍历慢问题和resize时出现导致put死循环的bug,但还是非线性安全的,比如数据丢失等等。因此多线程情况下还是建议使用concurrenthashmap。

上一篇 下一篇

猜你喜欢

热点阅读