java中Map的深入学习

Map

1.HashMap作为Map的主要实现类,线程不安全,效率高,可以存储null的key和vaule
HashTable作为古老的实现类,线程安全,效率低,不能存储null的key和vaule
LinkedHashMap:保证在遍历map元素时,可以按照添加的顺序实现遍历。
TreeMap:实现排序遍历。底层使用红黑树。

HashMap底层:数组加链表(jdk7以及之前)
数组+链表+红黑树(jdk8)
Properties:常用来处理配置文件,key和value都是String类型

2.Map结构的理解
Map中的key:无序的,不可重复的,使用Set存储所有的key
Map中的value:无序的,可以重复的,使用Collection存储所有的value
一个键值对:key-value构成了一个Entry对象。
Map中的Entry:无序的,不可重复的,使用Set存储所有的Entry。

3.HashMap底层原理
jdk7:在实例化以后,底层创建了长度是16的一维数组Entry[] table。 首先,调用key所在类的hashCode()计算key的hash值,此hash值经过某种算法计算以后,得到在Entry数组中的存放位置。
如果此位置上的数据为空,此时的key-value添加成功。
如果此位置上的数据不为空,(意味着此位置上存在着一个或多个数据(以链表形式存在)),比较key和已经存在的一个或多个数据的hash值:
如果key的hash值与已经存在的数据的hash值都不相同,此时key-value添加成功
如果key的hash值与已经存在的某一个数据的hash值相同,继续比较。调用key所在类的equals方法:
如果返回false,添加成功
如果返回true,替换value

在不断添加的过程中,会涉及到扩容问题,默认扩容为原来的2倍。

jdk8的不同
底层没有创建一个长度为16的Entry数组
jdk8底层的数组是Node[],而非Entry[]
首次调用put方法时,底层创建长度为16的数组
jdk7的底层数据结构只有:数组加链表,jdk8中底层结构数组+链表+红黑树
当数组的某一个索引位置上的元素以链表的形式存在的数据个数>8且当前数组的长度大于64时,此时索引位置上的所有数据改为使用红黑树存储。

4.HashMap中的重要常量
在这里插入图片描述
5.Properties
Properties类是Hashtable的子类,该对象用于处理属性文件。
存取数据时,建议使用setProperty(String key 和 String value)方法和getProperty(String key)方法。

6.Collections常用方法
和排序相关:
reaverse:反转List中元素的顺序
shuffle:对List集合中元素进行随机排序
swap:对List中i和j处的元素进行交换
和替换相关:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值