Java语言进阶-集合-Map接口

Map接口

  • Map:双列数据,存储Key-Value对的数据
    • HashMap:Map的主要实现类,线程不安全,效率高,可以存储null值,底层是数组+链表+红黑树
      • LinkedHashMap:线程安全的实现类,效率低。保证在遍历map元素时,可以按照添加的顺序实现遍历。因为他自带一对指针,适合做频繁的遍历
    • TreeMap:保证按照添加的Key-value对进行排序,实现排序遍历。底层是红黑树
    • Hashtable:古老的实现类
      • Properties:常用来处理配置文件
HashMap的底层

HashMap map = mew HashMap();

在实例化以后,底层创建了一维数组Node[] table.

map.put(key1,value2);

第一次调用put时,给数组添加长度。(懒汉式加载)

首先,调用key1所在类的hashCode()计算key1的hash值,此hash值经过某种算法计算后,得到node数组中的存放位置。

如果此位置上的数据为空,添加key1-value2.

如果此位置上的数据不为空,则比对哈希值是否相同,如果不相同则以链表的形式在这个位置上存储数据;如果相同则比较字面值是否相同,如果相同则使用value1替换原有数据;如果不相同则以链表的形式在这个位置上存储数据。

当数组的某一个索引位置上的以链表形式存储的元素个数大于8且数组长度大于64,此时索引位置上的链表转换为红黑树存储。

在这里插入图片描述
默认的扩容是扩容至原来长度的两倍,进行数据复制。

HashMap和Hashtable的异同

相同点:都实现了Map接口,都是无序+不可重复

不同点:Hashtable线程安全,HashMap线程不安全;hashTable继承Dictionary,HashMap继承AbstractMap;Hashtable的键值不能为null,hashMap键值可以为null;HashMap在单线程下效率高,HashTable在单线程下效率低
为null;HashMap在单线程下效率高,HashTable在单线程下效率低

LinkedHashMap

  • LinkedHashMap 是 HashMap 的子类
  • 在HashMap存储结构的基础上,使用了一对双向链表来记录添加元素的顺序
  • 与LinkedHashSet类似,LinkedHashMap 可以维护 Map 的迭代顺序:迭代顺序与 Key-Value 对的插入顺序一致

TreeMap

  • TreeMap存储 Key-Value 对时,需要根据 key-value 对进行排序。
  • TreeMap 可以保证所有的 Key-Value 对处于有序状态。 TreeSet底层使用红黑树结构存储数据
  • TreeMap 的 Key 的排序:
    • 自然排序:TreeMap 的所有的 Key 必须实现 Comparable 接口,而且所有的 Key 应该是同一个类的对象,否则将会抛出 ClasssCastException
    • 定制排序:创建 TreeMap 时,传入一个 Comparator 对象,该对象负责对TreeMap 中的所有 key 进行排序。此时不需要 Map 的 Key 实现Comparable 接口
  • TreeMap判断两个key相等的标准:两个key通过compareTo()方法或者compare()方法返回0。

Hashtable

  • Hashtable是个古老的 Map 实现类,JDK1.0就提供了。不同于HashMap,Hashtable是线程安全的。
  • Hashtable实现原理和HashMap相同,功能相同。底层都使用哈希表结构,查询速度快,很多情况下可以互用。  与HashMap不同,Hashtable 不允许使用 null 作为key 和 value
  • 与HashMap一样,Hashtable 也不能保证其中 Key-Value 对的顺序
  • Hashtable判断两个key相等、两个value相等的标准,与HashMap一致。

Properties

  • Properties 类是 Hashtable 的子类,该对象用于处理属性文件
  • 由于属性文件里的 key、value 都是字符串类型,所以 Properties 里的 key 和 value 都是字符串类型
  • 存取数据时,建议使用setProperty(String key,String value)方法和getProperty(String key)方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寒 暄

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

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

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

打赏作者

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

抵扣说明:

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

余额充值