HashMap、TreeMap、LinkedHashMap、Hashtable、Properties
由于Map中结构特点(Key无序的,不可重复,并且使用Set存储所有的key,value无序的,可重复,并且使用Collection存储所有的value )故key所在类需要重写hashCode(),equal()方法,value只需要重写equal。一个键值对:key-value构成了一个Entry对象。Map中的entry:无序的、不可重复的,使用Set存储所有的entry。
- HashMap:
作为Map的主要实现类;线程不安全的,效率高;存储null的key和value
- LinkedHashMap:
保证在遍历map元素时,可以按照添加的顺序实现遍历。原因:在原有的HashMap底层结构基础上,添加了一对指针,指向前一个和后一个元素。 对于频繁的遍历操作,此类执行效率高于HashMap。
- TreeMap:
保证按照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序, 底层使用红黑树
- Hashtable:
作为古老的实现类;线程安全的,效率低;不能存储null的key和value
- Properties:
常用来处理配置文件。key和value都是String类型
补充
HashMap底层
作为Map的主要实现类;线程不安全的,效率高;可以存储null的key和value,
JDK7在底层创建时创建了长度为16的一维数组 Entry[] table ,当
map.put(key,value)时,首先会根据key所在类的hashCode()算出所在数组哪个位置,如果当前位置没有元素,则添加成功,否则比对该链表上的所有元素的hash值不同的话添加成功,否则调用key所在类的equals()比较如果不同则添加成功,相同则覆盖。
JDK8中创建时只创建了Node[] table,并没有初始化长度,当首次put()时才会初始化长度为16。
LinkedHshMap底层
Entry<K,V> before, after;//能够记录添加的元素的先后顺序
标签:Map,面试题,JAVA,HashMap,存储,value,添加,key From: https://blog.csdn.net/weixin_47720421/article/details/140662224