Map复习

1、Map部分框架结构

在这里插入图片描述

2、对于Map实现类的介绍

1、HashMap是线程不安全的,可以存储值都为null的键值对,

2、与之相反,Hashtable作为古老的实现类,它是线程安全的,但是它不可以存储值为null的键值对,否则会报空指针异常。(似乎古老的实现类都是线程安全的?)

3、HashMap与Hashtable,键值对存储的位置与添加的位置是不同的,所以它们输出的键值对与存入的顺序不同

4、HashMap的子类 LinkedHashMap 会使用链表来标记存入的键值对,所以它输出的键值对顺序就是存入的顺序。并且遍历时按照添加顺序遍历,所以对于频繁的查询比HashMap快

5、Properties类用于存储字符串的键值对,常用于配置文件。

6、TreeMap类会对存入的键值对进行排序,排序方式:

  • 自然排序,Comparable,默认从小到大
  • 定制排序,Comparator

注意:
     TreeMap根据键值进行排序,所以键的类型必须实现Comparable或者Comparator。

3、HashMap底层实现

  • JDK7及之前,数组 + 链表
  • JDK8及之后,数组 + 链表 + 红黑树

键-值对先被封装成entry对象,再把entry对象存入map的entry数组中。entry对象存储在数组中的过程与 HashSet 一致。
不同的点在于:

  1. 当数组某一位置上链表长度 > 8 AND 此时entry数组的长度 > 64 时,把这一位置 的链表结构,转换成红黑树。
  2. 当添加key相同的键值对时,会把key对象对应的value值更新。
    eg:map.put(key1,value_10),把key1对应的value值更新为value_10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值