2021.12.11学习记录

一、Map接口

内部包含映射键值对,其中,键不能重复,但是值可以

使用方法:

Map<key的数据类型,vaule的数据类型>  map =  new xxMap<>()

(因为Map是一个接口,不能具体是实现,因此只能用来接收)

当键相同时,后添加的键的值会覆盖前面的值,但是键不会改变

其具体实现类有以下几个:

HashMap、HashTable、LinkedHashMap、TreeMap

二、HashMap实现类

基于Hash表与Map接口实现,提供所有可选择的映射操作,并在内部允许存在null键与null值

使用方法:

Map<key的数据类型,vaule的数据类型>  map =  new HashMap<>()

特点:

1)内部采用哈希表(数组 + 链表 + 二叉树)结合存值,并在1.8以后引入红黑树(保证二叉树两两边的深度相同)

2)内部的存储顺序是无序的

3)默认加载因子为0.75(即实际存储空间为总的存储空间的0.75),长度大小默认为16

4)存储算法:把key对象通过hash()方法计算哈希值,然将计算出来的值对16取余得出的结果即为key存放的位置,当这个位置有多个对象时,采用链表进行存储,在1.8以后,链表长度大于8 时,采用红黑树存储

5)扩充算法为:原大小 <<1(即扩充两倍) 注:当等于加载因子大小就认为已经满了,需要扩充

6)线程不安全,适合单线程

三、HashTable

基于Hash表与Map接口实现,提供所有可选择的映射操作,并在内部允许存在null键与null值

注:在对象内部必须实现hashcode()方法与 equals()方法

使用方法:

Map<key的数据类型,vaule的数据类型>  map =  new HashTable<>()

特点:

1)内部采用哈希表(数组 + 链表 + 二叉树)结合存值,并在1.8以后引入红黑树(保证二叉树两两边的深度相同)

2)内部的存储顺序是无序的

3)默认加载因子为0.75(即实际存储空间为总的存储空间的0.75),长度大小默认为11

4)存储算法:与HashMap一致

5)扩充算法为:原大小 <<1(即扩充两倍) + 1 注:当等于加载因子大小就认为已经满了,需要扩充

6)线程安全,适合多线程操作

四、LinkedHashMap

是HashMap的子类,因此内部特点大概相同,但是LinkedHashMap内部结构是有序的,在其内部使用双重链表维持顺序

注:在对象内部必须实现hashcode()方法与 equals()方法

使用方法:

Map<key的数据类型,vaule的数据类型>  map =  new  LinkedHashMap<>()

特点:

1)内部采用哈希表(数组 + 链表 + 二叉树)结合存值,并在1.8以后引入红黑树(保证二叉树两两边的深度相同)

2)内部的存储顺序是有序的

3)默认加载因子为0.75(即实际存储空间为总的存储空间的0.75),长度大小默认为16

4)存储算法:与HashMap一致

5)扩充算法为:原大小 <<1(即扩充两倍) + 1 注:当等于加载因子大小就认为已经满了,需要扩充

6)线程安全,适合多线程操作

五、TreeMap

内部基于红黑树的NavigableMap实现,内部进行自然排序,或者根据创建映射是提供的比较器进行排序,具体取决于使用的构造器

使用方法:

Map<key的数据类型,vaule的数据类型>  map =  new  TreeMap<>()

六、Map接口新特性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值