Map接口有哪些实现类

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底层

         比HashMap多了,Entry before, after;//能够记录添加的元素的先后顺序。


搜集整理自网络

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。