集合之集合框架、Collection
集合
集合:用来存储java类的对象,像是一个容器;在集合中,我们用泛型使集合更加安全
动态保存任意多个类型的多个对象;提供了一些方便的操作方法;
-
集合与数组的异同点:
-
数组长度固定,集合一般可变
-
数组存储元素类型单一,并且可以存储基本数据类型值;集合可以存储多种类型,但只可存储引用类型
-
数组方法单一,集合提供了大量的方法
-
数组的数据存储特点单一(有序有索引元素可重复),集合来说,不同的集合类型特点多样
-
集合框架
-
集合主要是两组
-
Collection,单列集合,接口有两个重要的子接口,List和Set,它们的实现子类都是单列集合
-
Map,双列集合,接口的实现子类,存放的K-V键值对
-
Collection
-
Iterator<E>
-
boolean add( E e):确保此集合包含指定的元素(可选操作);添加成功返回true,添加失败返回false
-
boolean hasNext();下一个不为空,返回true;
-
E next();返回迭代的下一个元素;
Collection接口没有直接的实现子类,借用Arraylist类演示方法
Collection接口实现类的特点
(public interface Collection<E>extends Iterable<E>)
-
collection实现子类可以存放多个元素,每个元素可以是Object
-
有些Collection的实现类,可以存放重复元素(List),有些不可以(Set);
-
有些Collection的实现类,有些是有序的(List),有些是无序的(Set);
-
Collection接口没有直接的实现子类,是通过它的子接口List和Set来实现的;
-
add:添加单个元素;添加基本数据类型时,会自动装箱,成为包装对象
-
remove():删除指定元素;可删除指定对象、索引处对象
-
contains():查找元素是否存在;存在返回true,不存在返回false
-
size():获取元素个数;
-
isEmpty():判断是否为空;空返回true,有元素返回false
-
clear():清空;清空集合
-
addAll(Collection<?> c):添加集合c到集合中,;可添加多个元素、或一个集合(也是集合中的元素)
-
containsAll():查找多个元素是否都存在;查找元素或集合(也是集合中的元素)
-
removeAll(Collection<?> c):删除集合中c包含中的元素,;删除元素、或集合(也是集合中的元素)
-
retainAll(Collection<?> c):保留集合中与集合c重复的元素;
-
toArray():返回一个包含此集合中所有元素的数组。;
Collection接口遍历元素方式
方式1:使用Iterator(迭代器)
-
Iterator对象称为迭代器,主要用于遍历Collection接口中的元素;
-
Iterator也是一种集合,但不用于存储,用于遍历集合元素值
-
单列集合的顶级父接口Collection继承了Iterable,在Iterable接口中定义了一个抽象方法iterator(),调用集合的iterator()方法,返回一个实现了Iterator接口的对象,即可以返回一个迭代器;
-
Iterator的结构:从头至尾,依次返回(取出)对应位置的元素,每次下移前调用iterator.hasNext()判断是否还有下一个元素(while);如果不判断,取出不存在元素,报异常:NoSuchElementException
-
指针初始位置在-1;
public static void main(String[] args) {
ArrayList list = new ArrayList();//集合实现类
//添加集合元素,对象类Book代码省略未粘贴
list.add(new Book("三国演义","罗贯中",52.4));
list.add(new Book("西游记","吴承恩",56.2));
list.add(new Book("水浒传","施耐庵",85.1));
//遍历list元素
Iterator iterator = list.iterator();//1、得到list对应的迭代器
//2、使用while循环遍历,快捷键itit
while (iterator.hasNext()) {//判断下一个是否还有数据
Object next = iterator.next();//有,返回下一个元素,类型是Object
System.out.println(next);//输出每个元素,默认调用toString,Book中已重写
}
}
-
当退出while循环后,此时iterator迭代器指向最后一个元素,如果再次运行iterator.next();,就会报错:NoSuchElementException
-
如果希望再次遍历,需要重置(即赋值)我们的迭代器
iterator = list.iterator();
方式2:增强for循环
在JDK1.5之后,对迭代器进行优化:可以使用foreach代替迭代器遍历,即简化版的iterator,本质一样。只能用来遍历集合和数组。
增强for循环的底层仍旧是iterator;快捷键:iter
基本语法:
/*for(元素类型 元素变量名 :集合名或数组名){
访问元素}
*/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构