JAVA常见面试题-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底层

Entry<K,V> before, after;//能够记录添加的元素的先后顺序

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

waviss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值