☰
Java基础进阶:从零吃透Collection、迭代器与Lambda遍历
2026/10/31 7:01:23 网站建设 项目流程

Java学习记录

日期: 10.28

📖今日知识点 ——集合的分类

一、Java 集合主要分为两大类:

单列集合 (Collection):一次存取一个元素。
双列集合 (Map):一次存取一对数据(键值对)。

二、单列集合 (Collection) 体系结构

Collection(接口)│ ├──List(接口)│ ├──ArrayList(实现类)│ ├──LinkedList(实现类)│ └──Vector(实现类)│ └──Set(接口)├──HashSet(实现类)│ └──LinkedHashSet(实现类)└──TreeSet(实现类)
1. List 系列集合特点

有序:添加的元素是有序的。

可重复:可以添加重复的元素。

有索引:可以通过索引访问元素。

2. Set 系列集合特点

无序:添加的元素是无序的。

不重复:不能添加重复的元素。

无索引:不能通过索引访问元素。

三、 Collection 接口常用方法

Collection 是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。

方法名称说明
public boolean add(E e)把给定的对象添加到当前集合中
public void clear()清空集合中所有的元素
public boolean remove(E e)把给定的对象在当前集合中删除
public boolean contains(Object obj)判断当前集合中是否包含给定的对象
public boolean isEmpty()判断当前集合是否为空
public int size()返回集合中元素的个数/集合的长度

💻练习代码

练习代码1:

packagecom.itheima.mycollection;importjava.util.ArrayList;importjava.util.Collection;publicclassA01_CollectionDemo1{publicstaticvoidmain(String[]args){/* /* public boolean add(E e) 添加 public void clear() 清空 public boolean remove(E e) 删除 public boolean contains(Object obj) 判断是否包含 public boolean isEmpty() 判断是否为空 public int size() 集合长度 注意点: Collection是一个接口,我们不能直接创建他的对象。 所以,现在我们学习他的方法时,只能创建他实现类的对象。 实现类:ArrayList *///目的:为了学习Collection接口里面的方法//自己在做一些练习的时候,还是按照之前的方式去创建对象。Collection<String>coll=newArrayList<>();//1.添加元素//细节1:如果我们要往List系列集合中添加数据,那么方法永远返回true,因为List系列的是允许元素重复的//细节2:如果我们要往Set系列集合中添加数据,那么方法返回值就表示添加成功没有,因为Set系列的是不允许元素重复的//因为Set系列的集合不允许元素重复,所以如果添加的元素已经存在,那么添加失败,方法返回falsecoll.add("aaa");coll.add("bbb");coll.add("ccc");System.out.println(coll);//2.清空元素//coll.clear();//System.out.println(coll);//3.删除元素//注意1:因为collection里面定义的是共性的方法,所以此时不能通过索引进行删除,只能通过元素的对象//注意2:方法会有一个布尔类型的返回值,删除成功返回true,删除失败返回false//如果删除的元素不存在,那么方法返回falsecoll.remove("bbb");System.out.println(coll);//4.判断元素是否包含//细节1:底层是依赖equals方法进行判断的//细节2:如果存的是自定义对象,没有重写equals方法,那么默认使用的是Object类中的equals方法进行判断,而Object类中的equals方法默认比较的是对象的地址值//需要在自定义的JavaBean中重写equals方法//不过字符串已经重写equals方法了booleanresult=coll.contains("aaa");//trueSystem.out.println(result);//5.判断集合是否为空//底层是依赖size方法进行判断的System.out.println(coll.isEmpty());//false//6.获取集合的长度System.out.println(coll.size());//2}}

练习代码2:

packagecom.itheima.mycollection;importjava.util.Objects;publicclassStudent{privateStringname;privateintage;publicStudent(){}publicStudent(Stringname,intage){this.name=name;this.age=age;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}//重写equals方法@Overridepublicbooleanequals(Objecto){if(o==null||getClass()!=o.getClass())returnfalse;Studentstudent=(Student)o;returnage==student.age&&Objects.equals(name,student.name);}}
packagecom.itheima.mycollection;importjava.util.ArrayList;importjava.util.Collection;publicclassA02_CollectionDemo2{publicstaticvoidmain(String[]args){//1.创建集合对象Collection<Student>coll=newArrayList<>();//2.创建3个学生对象Students1=newStudent("张三",18);Students2=newStudent("李四",19);Students3=newStudent("王五",20);//3.添加学生对象到集合中coll.add(s1);coll.add(s2);coll.add(s3);//4.判断集合中是否包含张三这个元素Students4=newStudent("张三",18);//因为contains方法在底层依赖于equals方法//如果存的是自定义对象,没有重写equals方法,那么默认使用的是Object类中的equals方法进行判断,而Object类中的equals方法默认比较的是对象的地址值//需求:如果姓名和年龄一样,则认为是同一个对象//需要在自定义的JavaBean中重写equals方法System.out.println(coll.contains(s4));//true}}

📖今日知识点 ——迭代器

一、迭代器 (Iterator)

1. 基本概念:迭代器在遍历集合的时候是不依赖索引的。

2. 迭代器需要掌握三个方法(代码示例):

方法名称说明
boolean hasNext()判断当前位置是否有元素,有元素返回 true,没有元素返回 false
E next()获取当前位置的元素,并将迭代器对象移向下一个位置
Iterator<E> iterator()返回迭代器对象,默认指向当前集合的 0 索引位置。
Iterator<String>it=list.iterator();while(it.hasNext()){Stringstr=it.next();System.out.println(str);}

3. 迭代器的四个细节:

🔴 如果当前位置没有元素,还要强行获取,会报 NoSuchElementException(异常)。

🔴 迭代器遍历完毕,指针不会复位。

🔴 循环中只能用一次 next 方法。

🔴 迭代器遍历时,不能用集合的方法进行增加或者删除。

💻练习代码

练习代码一:迭代器遍历:

packagecom.itheima.mycollection;importjava.util.ArrayList;importjava.util.Collection;importjava.util.Iterator;publicclassA03_CollectionDemo3{publicstaticvoidmain(String[]args){/* Collection系列集合三种通用遍历方式: 1. 迭代器遍历 2. 增强for遍历 3. Lambda表达式遍历 迭代器遍历相关的三个方法: public Iterator<E> iterator():获取一个迭代器对象 Boolean hasNext():判断当前指向的位置是否有元素 E next():获取当前指向的位置并移动指针 *///1.创建集合并添加元素Collection<String>coll=newArrayList<>();coll.add("aaa");coll.add("bbb");coll.add("ccc");coll.add("ddd");//2.获取迭代器对象//迭代器就好比一个箭头,默认指向集合的0索引位置Iterator<String>it=coll.iterator();//3.利用循环不断的取获取集合中的每一个元素while(it.hasNext()){Stringstr=it.next();System.out.println(str);}}}

练习代码二:迭代器的四个细节:

packagecom.itheima.mycollection;importjava.util.ArrayList;importjava.util.Collection;importjava.util.Iterator;publicclassA04_CollectionDemo4{publicstaticvoidmain(String[]args){/* 迭代器的细节注意点: 1.报错NoSuchElementException 2.迭代器遍历完毕,指针不会复位 3.循环中只能用一次next方法 4.迭代器遍历时,不能用集合的方法进行增删操作 *///1.创建集合并添加元素Collection<String>coll=newArrayList<>();coll.add("aaa");coll.add("bbb");coll.add("ccc");coll.add("ddd");//2.获取迭代器对象//迭代器就好比一个箭头,默认指向集合的0索引位置Iterator<String>it=coll.iterator();//3.利用循环不断的取获取集合中的每一个元素while(it.hasNext()){Stringstr=it.next();System.out.println(str);}//4.当上面的循环结束之后,迭代器的指针已经指向了最后没有元素的位置//System.out.println(it.next());//NoSuchElementException//5.迭代器遍历完毕,指针不会复位System.out.println(it.hasNext());//false//6.如果我们要继续第二次遍历集合,只能再次获取一个新的迭代器对象Iterator<String>it2=coll.iterator();while(it2.hasNext()){Stringstr=it2.next();System.out.println(str);}}}
packagecom.itheima.mycollection;importjava.util.ArrayList;importjava.util.Collection;importjava.util.Iterator;publicclassA05_CollectionDemo5{publicstaticvoidmain(String[]args){/* 迭代器的细节注意点: 1.报错NoSuchElementException 2.迭代器遍历完毕,指针不会复位 3.循环中只能用一次next方法 4.迭代器遍历时,不能用集合的方法进行增删操作 *///1.创建集合并添加元素Collection<String>coll=newArrayList<>();coll.add("aaa");coll.add("bbb");coll.add("ccc");coll.add("ddd");coll.add("eee");//2.获取迭代器对象//迭代器就好比一个箭头,默认指向集合的0索引位置Iterator<String>it=coll.iterator();//3.利用循环不断的取获取集合中的每一个元素while(it.hasNext()){//4.next方法的两件事:获取元素,并移动指针//System.out.println( it.next());//aaa ccc eee//System.out.println( it.next());//bbb ddd 获取不到元素NoSuchElementExceptionStringstr=it.next();//5.迭代器遍历时,不能用集合的方法进行增删操作// if("bbb".equals(str)){// coll.remove("bbb");// }// System.out.println(coll);//ConcurrentModificationExceptionSystem.out.println(str);}}}

📖今日知识点 ——增强for遍历

一、增强for核心原理:

  • 增强 for 的底层就是迭代器,为了简化迭代器的代码书写而设计的。
  • 它是 JDK5 之后出现的,其内部原理就是一个 Iterator 迭代器。
  • 使用限制:所有的单列集合和数组才能用增强 for 进行遍历。

二、基本格式:

for (元素的数据类型 变量名 : 数组或者集合) {

}

三、具体示例:

for(Strings:list){System.out.println(s);}

四、增强for遍历小细节:

修改增强for中的变量,不会改变集合中原本的数据

💻练习代码

packagecom.itheima.mycollection;importjava.util.ArrayList;importjava.util.Collection;importjava.util.Iterator;publicclassA06_CollectionDemo6{publicstaticvoidmain(String[]args){/* Collection系列集合三种通用遍历方式: 1. 迭代器遍历 2. 增强for遍历 3. Lambda表达式遍历 增强for格式: for(数据类型 变量名 : 集合/数组){ } 快速生成格式:集合的名字.for回车 *///1.创建集合并添加元素Collection<String>coll=newArrayList<>();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");//2.增强for遍历//注意点://s是一个第三变量,在循环的过程中依次表示集合中的每一个数据// for(String s : coll){// System.out.println(s);// }//快速生成:coll.for回车for(Strings:coll){s="qqq";}//增强for的小细节:修改增强for中的变量,不会改变集合中原本的数据System.out.println(coll);//[zhangsan, lisi, wangwu]}}

📖今日知识点 ——Lambda表达式遍历

Lambda表达式遍历:

得益于 JDK 8 开始的新技术 Lambda 表达式,提供了一种更简单、更直

核心方法

方法名称说明
default void forEach(Consumer<? super T> action)结合 Lambda 表达式遍历集合,对集合中的每个元素执行指定操作
。

核心方法

💻练习代码

packagecom.itheima.mycollection;importjava.util.ArrayList;importjava.util.Collection;importjava.util.function.Consumer;publicclassA07_CollectionDemo7{publicstaticvoidmain(String[]args){/* Collection系列集合三种通用遍历方式: 1. 迭代器遍历 2. 增强for遍历 3. Lambda表达式遍历 Lambda表达式遍历: default void forEach(Consumer<? super T> action); *///1.创建集合并添加元素Collection<String>coll=newArrayList<>();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");//2.利用匿名内部类的形式//底层原理://其实也会自己遍历集合,依次得到每一个元素//把得到的每一个元素,传递给下面的accept方法//s依次表示集合中的每一个元素/* coll.forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); *///Lambda表达式//()->{}coll.forEach(s->System.out.println(s));}}

📖今日知识点 —— 小结

  1. Collection 是单列集合的顶层接口,所有方法被 List 和 Set 系列集合共享。
  2. 常见成员方法:
    add、clear、remove、contains、isEmpty、size
  3. 三种通用的遍历方式:
  • 迭代器: 在遍历的过程中需要删除元素,请使用迭代器。
/* 在遍历过程中若需删除元素,必须通过迭代器的 remove() 方法操作, 而非集合本身的增删方法。这是为了避免并发修改异常, 确保遍历过程的稳定性与安全性。 */List<String>list=newArrayList<>(Arrays.asList("a","b","c","d"));// ❌ 错误做法:使用集合的 removefor(Strings:list){if("b".equals(s)){list.remove(s);// 抛出 ConcurrentModificationException}}// ✅ 正确做法:使用迭代器的 removeIterator<String>iterator=list.iterator();while(iterator.hasNext()){Strings=iterator.next();if("b".equals(s)){iterator.remove();// 安全删除}}
  • 增强 for、Lambda: 仅仅想遍历,那么使用增强 for 或 Lambda 表达式。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询