Java集合(四)

目录

1.Map的继承体系

2.Map中存储的key-value的特点

3.HashMap的底层实现原理(JDK7)

术语介绍

实现原理

JDK8

4.LinkedHashMap的底层实现原理

5.Map中的常用方法

6.Collections工具类的使用


1.Map的继承体系

Map:用来存储双列数据。

    HashMap:作为Map的主要实现类;线程不安全,效率高;可以存储null的Key和value。

        LinkedHashMap:在原有的HashMap继承上加上了两个指针来记录前一个和后一个元素,保证在遍历Map元素时,按照添加的顺序遍历。

    TreeMap:可以按照添加的key-value进行排序,实现排序遍历。(按照key的自然排序或定制排序来排)。

    Hashtable:作为Map的古老实现类;线程安全,效率低。

        Properties:key和value都是String类型,用来处理配置文件。

2.Map中存储的key-value的特点

Map中的key是无序的,不可重复的,使用Set来存储。

Map中的value是无序的,可重复的,使用collection来存储。

key和value构成一个entry对象,entry是无序的不可重复的,使用set来存储。

注意点:因为要保证不可重复和无序性,要求添加key对象所在类重写equals()和hashCode()。对于value对象所在类要重写equals()方法。

3.HashMap的底层实现原理(JDK7)

术语介绍

加载因子:用来计算临界值的一个数,通常为0.75.

临界值:当HashMap中的元素个数超过这个数时,会进行扩容。等于当前长度*加载因子。

实现原理

①在使用空参构造器创建一个HashMap对象后,先创建一个长度为16的Entry[] table数组。

②使用put(key,value)添加元素时,先用key所在类的hashCode()获取hash值,进一步计算出在Entry数组中的存放位置。如果此位置上数据为空,则添加成功。如果不为空(以及存在一个或多个数据,以链表方式存在),比较key和该位置上的其他元素的hash值,如果都不同,则添加成功。如果和某一个存在的元素的hash值相同,则比较两个元素的equals(),如果是false则添加成功;如果是true则使用key所对应的数据来替换该位置上entry原有的value。(具有替换操作)

③在添加过程中,会涉及扩容问题,当超出临界值且要存放的位置不为空时扩容,默认扩容为原来的两倍。

JDK8

①在创建HashMap对象时,底层没有创建长度为16的数组。(Node[])

②在首次调用put()时,会创建长度为16的数组。

③jdk7中的底层结构只有数组+链表,jdk8中的底层结构有数组+链表+红黑树。当数组的某个索引位置上的元素以链表方式存在的数据个数>8且当前数组的长度>64时,此位置上的元素改用红黑树进行存储。

4.LinkedHashMap的底层实现原理

可参考Java集合(三)中的HashSet。

5.Map中的常用方法

1.Object put(Object key,Object value):将指定的key-value添加到当前对象中。

2.void putAll(Map m):将m中的所有元素添加到当前对象中。

3.Object remove(Object key):将指定key的键值对移除。

4.void clear():清空当前对象。

5.Object get(Object key):获取指定的key对应的value值。

6.boolean containsKey(Object key):判断是否包含指定的key。

7.bollean containsValues(Object value):判断是否包含指定的value。

8.int size():获取键值对的个数。

9.boolean isEmpty():判断元素个数是否为0.

10.boolean equals(Object obj):判断是否相同。

11.Set keySet():获取所有的key构成的Set对象。

12.Collection values():获取所有value构成的Collection对象。

13.Set entrySet():获取所有entry构成的Set对象。

6.Collections工具类的使用

1.reverse(List list):反转

2.shuffle(List list):对数据进行随机化处理。

3.sort(List list):按照自然排序进行升序排序。

4.swap(List list,int a,int b):交换两个元素的位置。

5.void copy(List dest,List src):把src中的内容复制到dest中。

6.SynchronizedXxx(Xxx xxx):把线程不安全的Xxx对象变成线程安全的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值