Map
HashMap
jdk7 数组+链表
jdk8 数组+链表+红黑树
面试题
Map中的Key:无序的,不可重复的,使用Set存储所有的key
----向key(Set)中添加数据,其所在类一定要重写hashCode()和equals()
Map中的Value:无序的,可可重复的,使用Collection存储所有的value------value所在的类重写相关的equals()
一个键值对:key-value构成一个Entry对象
Map中的entry对象:无序的,不可重复的,使用Set存储所有的entry
HashMap的底层实现原理
Jdk 1.7
Jdk8与Jdk 7的不同和
- new HashMap():底层没有创建一个长度16的数组
- jdk8 底层的数组是Node()而非Entry[]
- 首次调用put()方法 底层创建长度为16的数组
类似于7是饿汉式8是懒汉式 - jdk7底层结构只有数组+链表,jdk8中底层结构:数组+链表+红黑树
当数组某一个索引位置上的元素以链表形式的数据个数>8,且当前数据的长度>64时,此时此索引位置上所有数据改为使用红黑树存储
Jdk7的底层源码分析
底层创建了长度为16的一维数组Entry[] table 加载因子因子为0.75
超过临界值(16*加载因子)时候,默认扩容方式为为原来容量的两倍
二 Map的常用方法
添加则是在同一个key上修改value即可
Map的遍历
//遍历所有的key集,keySet()
//遍历所有的value集,values()
//遍历所有的key-value集,entrySet()
三.TreeMap
自然排序
定制排序
四
面试题:Collection与Collections的区别
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。