第十三章 集合2

12.HashMap

1.HashMap阶段小结

在这里插入图片描述

2.HashMap底层机制

里面存放的元素全是HashMap $ Node对象(k1,v1)等,
他们都实现了Map$Entry的接口。
在这里插入图片描述
在这里插入图片描述

3.HashMap源码解读

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.HashMap扩容树化触发

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这加到第8个,此时还没有进行树化,下面加第9个的时候,先进行扩容,table
的大小此时变为32
在这里插入图片描述
下面再加一个,到第10个,此时还没有进行树化,table继续进行扩容,
长度变为64
在这里插入图片描述
此时虽然链表的hash值没有变化,但是整条链表做了一个移动
在这里插入图片描述
此时再进行添加,就会树化了,变为TreeNode
在这里插入图片描述

13.Hashtable

1.Hashtable使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.Hashtable扩容

Hashtable的底层就是一个Entry数组
当到达临界值的时候以两倍加一的方式进行扩容
在这里插入图片描述

3.HashMap与Hashtable对比

在这里插入图片描述

14.Properties

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

15.集合选型规则

LinkedhashMap的底层就是LinkedHashMap,
而LinkedHashMap的底层就是HashMap
在这里插入图片描述

16.TreeSet源码解读

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面就是先向下转型为String类型,再调用String类的compareTo方法
在这里插入图片描述
在这里插入图片描述
如果想要反过来进行输出
在这里插入图片描述
下面看源码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果我们想要按照长度的大小进行排序(从大到小)
在这里插入图片描述
在这里插入图片描述
如果想要从小到大
在这里插入图片描述
在这里插入图片描述
这种情况下想要加入一个“abc”是加不进去的,因为tom与abc的大小全是3,
相减为0,根据底层的源码,是加不进去的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

17.TreeMap源码解读

在这里插入图片描述
默认情况下是无序的
在这里插入图片描述
在这里插入图片描述
按照key中String的大小进行排序
在这里插入图片描述
在这里插入图片描述
下面按照字符串长度的大小进行排序
在这里插入图片描述
在这里插入图片描述

下面对源码进行解读
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以前的HashMap的值相等不相等是由equals来决定的,而这里的TreeSet的值相不相等是由compare方法来决定的

18.Collections工具类

1.collections工具类1

在这里插入图片描述
在这里插入图片描述

reverse反转list中元素的顺序

ArrayList本身是有序的
在这里插入图片描述
在这里插入图片描述

shuffle对list集合元素进行随机排序

在这里插入图片描述
每次执行完的结果都是不一样的
第一次执行
在这里插入图片描述
再次执行
在这里插入图片描述
下面循环执行,查看效果
在这里插入图片描述
在这里插入图片描述

Sort

在这里插入图片描述
自然排序就是按照字符串的大小进行排序的
在这里插入图片描述
如果想要指定排序,则可以使用Comparator,
比如下面我们希望按照字符串的长度大小进行排序
在这里插入图片描述
在这里插入图片描述

swap交换元素

在这里插入图片描述
在这里插入图片描述

2.collection工具类2

在这里插入图片描述
在这里插入图片描述

max

在这里插入图片描述
在这里插入图片描述
如果想要定制排序取出最大值,我们可以使用Comparator
在这里插入图片描述
在这里插入图片描述
如果要返回最小的,换一下顺序即可
在这里插入图片描述

min

与max一模一样

frequency返回集合中指定元素出现的次数

在这里插入图片描述
在这里插入图片描述

copy

在这里插入图片描述
这里会抛出异常,告诉你数组越界了
在这里插入图片描述
下面是copy的源码,此时我们的dest数组还是空的,所以会有越界异常
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

replacedAll

在这里插入图片描述
在这里插入图片描述

19.本章作业

1.本章作业1

在这里插入图片描述
其中的双引号我们需要添加转义符
ArrayList不是数组,要使用get方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.本章作业2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
add
在这里插入图片描述
在这里插入图片描述
remove
在这里插入图片描述
在这里插入图片描述
contains
在这里插入图片描述
在这里插入图片描述
size
在这里插入图片描述
在这里插入图片描述
isEmpty / clear
在这里插入图片描述
addAll
在这里插入图片描述
在这里插入图片描述
containsAll
在这里插入图片描述
removeAll
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.本章作业3

在这里插入图片描述
放置650的时候会做一个自动装箱的动作,我们放入其中的数据不是int型的,而是integer型的。
在这里插入图片描述
在这里插入图片描述
这里的key是Object类型,需要进行一个向下转型将其变为integer类型。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.本章作业4

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的Person类没有实现Comparable接口,所以会报错
在这里插入图片描述
继承这个并实现接口方法就可以
在这里插入图片描述
此时我们再运行,会有Person对象在其中
在这里插入图片描述
如果此时我们再继续添加Person对象,那么我们的集合中也只有一个Person对象,因为我们的继承的CompareTo方法返回的是一个0,它永远都相等。
在这里插入图片描述
下面我自己写的
在这里插入图片描述

5.本章作业5

在这里插入图片描述
这里的set.remove(p1)不会成功,因为在remove的时候会重新hash一个新的位置,本在的p1的位置可能在1,但remove的时候可能就3,它找不到p1,所以此时删除会失败。
所以下面的会输出2个对象。
在这里插入图片描述
同样的道理,下面的set.add()添加会成功,因为它会重新hash一个新的位置,比如存储到位置3。所以下面会输出3个对象。
再下面的set.add()会添加到位置1,因为前面已经添加过一模一样的(1001,“CC”)。
但此时位置1原来的Person对象中的“AA”已经改成了“CC”,所以会挂到后面。
在这里插入图片描述
在这里插入图片描述
注意:这里一定要按照题目要求重写equals与hashCode方法,即id与name都相同时,Person对象就是相同的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值