Java基础复习(JavaSE进阶)第五章 集合框架

5-1 Collection集合

01 84、集合进阶概述

02 85、Collection集合:常用API

其中第七条用Object的好处是可以接收一切类型的数组。如果你对类型有要求也可以自由切换。

将C1的数据导入c2中。

输出c1c2,会发现c2中的数据依旧存在。c1中包含了c1和c2的所有数据。

总结:

03 86、Collection集合的遍历方式一:迭代器

代码实现:

上图是我们手工遍历的结果。用it.next依次向后一个一个取元素。超出集合范围后会报错。

依旧先从集合中获取迭代器对象,并将迭代器对象默认放在集合的第一位。

上图是我们使用while循环,让it调用hasNext方法作为判断条件,

hasNext会判断当前索引处有无元素,且将迭代器向后移动一索引。

在集合范围内,用ele来存放对应索引的元素并打印输出。

总结:

Iterator<String> it = c.iterator();


while(it.hasNext()){
    String 变量名 = it.next();
    System.out.println(变量名);

}

04 87、Collection集合的遍历方式二:增强for循环

格式:

增强for循环遍历集合的本质就是迭代器遍历集合。

代码演示:

上图为增强for遍历集合和增强for遍历数组的示例。

增强for快捷键:直接右键选中需要遍历的对象按“ .for ”

05 88、Collection集合的遍历方式三:Lambda

代码演示:

首先我们要知道forEach是lambda中的一个子类中的方法,这个子类是一个函数式接口。所以我们在调用foreach的时候:

第一反应是:接口无法创建对象,所以使用匿名内部类重写抽象方法创建对象。

第二反应是:我们可以使用lambda表达式对这个匿名内部类进行简化

两步简化:去掉方法名前内容并添加“->”,再去掉大括号,变量类型。

第三步反应是:发现前后变量名相同,可以采用方法引用的方式继续化简,去掉前后变量名和“->”,在方法名前添加“ ::”

06 89、遍历集合的案例

简简单单思路相同,区别在于增强for的使用。

需要注意的知识点:

5-2 List系列集合

01 90、List系列集合:特点、特有方法

02 91、List系列集合:遍历方式

有索引的才可以用for循环去遍历

代码实现如下:

03 92、List系列集合:ArrayList集合的底层原理

总结:

04 93、List系列集合:LinkedList集合的底层原理

总结:

05 94、List系列集合:LinkedList集合的应用场景:做队列、栈

代码模拟入队出队:

所用方法:addLast();removeFirst();

代码模拟入栈出栈:

所用方法:addFirst();removeLast();

实际上,我们有压栈出栈的api可以调用,直接用push和pop

5-3 Set系列集合

01 95、Set系列集合:整体特点

02 96、Set系列集合:HashSet集合的底层原理1

当创建对象数量超过int的范围后,哈希值可能出现相同

03 97、Set系列集合:HashSet集合的底层原理2

通过加载因子扩容,一旦数组中的内容已经占据了数组长度x加载因子的值,那么就会执行数组扩容。将大小扩大为原数组的两倍。再一个一个将数组内容拷贝到新数组。

但问题又出现了,如果链表太长了怎么办呢?

jdk8之后引入了红黑树的概念。把比元素大的放右边,比元素小的放左边,相当于查找数据的时候进行了二分查找。性能倍增。

如何判断元素的大小值呢?实际上这里判断的是元素的哈希值。用哈希值的大小来进行判断。

 

04 98、Set系列集合:HashSet集合去重复机制

重写hashCode让他们哈希值相同,这样可以准确找到具体位置。

其次重写equals方法,比较他们的内容

这样哈希值相同内容也相同的对象就可以被看作是重复了。

05 99、Set系列集合:LinkedHashSet集合

06 100、Set系列集合:TreeSet集合

实现原理,红黑树排序:将需要输入的元素的哈希值依次从头节点向下比较,直到找到自己的位置存入或者遇到相同的不存入。红黑树会这样把元素从左到右按照从小到大的顺序排列。

代码实现如下:

法1:

法2:

5-4 集合补充知识、综合案例

01 101、Collection系列集合的小结

02 102、补充知识:集合的并发修改异常问题

普通for循环遍历可以通过i--的方式来解决

迭代器遍历可以通过调用迭代器自身的remove方法来解决这个问题。

for循环和lambda表达式就无法解决这样的问题了。

03 103、前置知识:可变参数

代码演示

输出结果

注意事项:

总结:

04 104、集合的工具类:Collecitons

5-6 Map、JDK8新特性

03 116、补充知识:集合的嵌套

如上图,map中依然是一个集合,这就是集合的嵌套。

存入和输出

04 117、JDK8新特性:Stream流入门

相比经典api来说,Stream流强大太多了。

05 118、JDK8新特性:Stream流的创建

获取集合的Stream流方式:

set集合和list集合可以直接调用stream方法来创建stream流

map只能先想办法转为set再调用Stream流。可以用map.key获取key值。map.value获取value值,

也可以用map.entry将数据以entry类型封装给一个集合,再用这个集合直接调用Stream流。

06 119、JDK8新特性:Stream流的中间方法

08 121、JDK8新特性:Stream流的终结方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值