HashMap
内在结构
数组和链表(红黑树1.8)
线程安全
不是线程安全的(对hashmap写入时分析)。
如何使其安全:
1.在外部包装HashMap,实现同步机制
2.使用Map m = Collections.synchronizedMap(new HashMap(…));,这里就是对HashMap做了一次包***r>3.使用java.util.HashTable,效率最低
4.使用java.util.concurrent.ConcurrentHashMap,相对安全,效率较高
jdk8与jdk7的不同
- hash冲突,也就是如果计算出来hash值相同的时候,我们不是放到一个链表里面吗?jdk7是在头部插入新的元素, jdk8是在尾部插入新来的元素。
- 第二点也就是最大的不同,jdk8的resize()操作比jdk7快了很多,并且jdk7 resize链表会倒过来,而jdk8不会。
hashmap的遍历方法:
- for(String key : map.keySet());
- for(Map.Entry<String, String> entry : map.entrySet())
entry.getKey()/getValue(); - Iterator 遍历
查看1道真题和解析