集合Map
Map 属于Java Collections Framework的成员。但是它不是Collection;
Map实现: map里面有个数组其类型为设置的键值泛型,数组里面保存的是链表节点
- HashMap通过调用存储对象的hashCode()方法和当前数组长度做&(与)运算来计算它应该放在哪个数组位置,当多个对象位置相同时,通过内部封装类Node的next 和 pre相连,为避免某一个数组值下面的Node链过长而其他位置则很短或者没有,hashCode()计算应尽可能的做到平均分配,实际编程中很难做到分配均匀,为了降低当Node节点过长造成的性能损耗jdk1.8中当数组长度(64)和Node节点数大于设定值(8)将在扩容时转换为红黑树,而当进行多次扩容后红黑树树深小于一定值时则转为链表,
hashMap是线程不安全的
其他map都是基于hashmap实现
- LinkedMap 在hashmap基础上重写Node,增加两个内部属性,用于指向linkedMap的先后添加顺序,是线程不安全的
-
Hashtable 在hashmap基础上重写get,put 方法 给get,put加上synchronized