集合{Collection集合 迭代器 ArrayList集合 LinkedList集合 HashMap集合 }(一)

目录标题

集合

在这里插入图片描述

什么是集合

在这里插入图片描述

集合和数组不同
不要将两者混洗
数组的特点:创建的时候要指定其长度 而且使用时 长度是不可改变的
所以当我们统计不可控制变量的数据的时候
这时候我们需要
使用集合Collection


在这里插入图片描述

Map

集合框架中第二个体系

在这里插入图片描述

Collection集合

一共有十七个公共方法!!!

在这里插入图片描述

Collection中的方法分类


第一类 修改操作
add(E)添加数据
remove(Object)删除数据


第二类 查询操作
size()查询集合中有多少个数据
isEmpty()集合是否为空
contains(Object)集合中是否包含某个数据


第三类 批量操作
addAll(Collection <? extends E>) 添加批量数据 removeAll(Collection <?>) 删除批量数据
清空集合等等


在这里插入图片描述

add和addAll方法

练习一


讲解
修改操作中 boolean add(E e)
重点
boolean add(E e)
数据类型和集合类型一样

在这里插入图片描述


一般来说,super() 的含义可有以下四个理解:
1.子类的构造过程中必须调用父类的构造方法
2.子类可在自己的构造方法中使用super()来调用父类的有参构造方法
(而此刻显示调用super(name)就是调用父类的有参构造方法)
3.如果子类的构造方法中没有显示的调用父类的构造方法,则系统默认的调用父类的无参的构造方法。
4.如果子类的构造方法中既没有显示调用父类的构造方法,而父类中又没有无参的构造方法,则编译出错。
public Banana(String name) {
//(而此刻显示调用super(name)就是调用父类的有参构造方法)
super(name);
}



在这里插入图片描述

练习二

讲解
批量操作中
boolean addAll(Collection <? extends E> c)方法


在这里插入图片描述

总结

在这里插入图片描述

集合删除数据的方法


集合删除数据的方法一共有四种
remove(Object);删除单个数据
删除批量数据 removeAll(Collection<?>)
删除符合条件的数据 removeIf(Predicate< ? super E >)
JDK 1.8 新加入的方法: 删除所有数据 直接清空集合 Clear();



讲解boolean remove(Object o);

删除单个数据的方法

在这里插入图片描述

数据如何删除的原理


数据如何删除的原理
查看源码 remove()方法
数据通过迭代器来删除的
先判断删除的数据是否为null
第一种情况 如果数据为null是
使用“==”号 来匹配集合中是否存在null
第二种情况
利用equals来匹配删除的数据


集合删除数据流程图


在这里插入图片描述

迭代器Iterator和Iterable


collection集合选择了迭代器模式来访问数据的方法
迭代器是一个接口
有两个抽象方法
hasNext();用来判断 还有没有数据可供访问
next();方法 用来访问 集合的下一个数据


在这里插入图片描述


而集合List中的get()方法
依赖索引来获取数据
而集合Queue中的poll()方法
依赖队列规则来获取数据

在这里插入图片描述


而迭代器具有通用性
可以访问不同特性的集合数据
而不用关心它们的内部实现

在这里插入图片描述


迭代器的使用
跟游标卡尺使用差不多

在这里插入图片描述


重点!!!
注意点
集合不是直接去实现Itertor接口的
而是实现Iterable接口
是用这个Iterable定义的方法来返回当前集合的迭代器

在这里插入图片描述


从下图可以看出 Collection集合 就继承Iterable接口
则Collection体系中都要按照这种方式返回迭代器 以供大家访问数据

在这里插入图片描述


重点解释
为什么要通过这种方式 来使用迭代器
如果当集合直接实现迭代器的话
那如果别人调用当前集合的next()方法
那么就会影响到你遍历数据
因为你自己原本定义从头开始遍历所有数据的
但是别人已经将数据遍历完了 这样的话你本身就拿不到数据了

在这里插入图片描述

解决办法
通过实现Iterable接口方式
就可以每次返回新的迭代器
不同的迭代器 遍历数据互不影响
所以这里可以看出
迭代器具有独立性和隔离性

在这里插入图片描述




迭代器具有屏蔽集合间不同特性


还有一个好处:
如果你实现了Iterable接口
并且按照要求返回迭代器
那么就可以使用foreach循环
来直接遍历数据


理解foreach循环
foreach循环是一个Java的语法糖
反编译后就会发现 它本身用的就是迭代器


在这里插入图片描述

总结:

iterable 用来返回迭代器
实现了该接口的类 算是可迭代对象了
可直接使用foreach循环来访问数据


Iterator 用来遍历集合的数据
不用关心集合的内部实现
foreach 循环本身用的就是迭代器


集合批量删除数据的方法

在这里插入图片描述

removAll()方法

在该集合中删除指定集合中 一样的数据
c 为指定要删除的数据集合
只要有一个删除成功 就会返回true 否则返回false


在这里插入图片描述

removeAll()方法删除原理


numbers数据集合 删除 subNumbers数据集合中
存在一样的数据
依次检查迭代器中返回的每一个数据 来查看它是否包含在指定的
subNumbers数据集合中
如果包含在内 则使用迭代器中的remove方法 将它从这个集合中删除


在这里插入图片描述

练习

在这里插入图片描述




retainAll(Collection <?>)方法


跟removeAll方法正好相反
保留在指定集合中存在的数据
c 为 要保留的数据集合
同理也是 只要有一个匹配成功 就会返回true 否则返回false

在这里插入图片描述

retainAll方法保留数据集合原理
遍历集合 依次检查迭代器返回的每一个数据
来查看它是否不包含在指定的集合中
如果不包含在内 则使用迭代器的remove方法
将它从这个集合中删除


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值