JavaSE——集合1:Collection接口(Iterator和增强for遍历集合)

embedded/2024/10/10 23:58:43/

目录

一、集合框架体系(重要)

二、集合引入

(一)集合的理解与好处

Collection%E6%8E%A5%E5%8F%A3-toc" style="margin-left:0px;">三、Collection接口

Collection%E6%8E%A5%E5%8F%A3%E5%AE%9E%E7%8E%B0%E7%B1%BB%E7%9A%84%E7%89%B9%E7%82%B9-toc" style="margin-left:40px;">(一)Collection接口实现类的特点

Collection%E6%8E%A5%E5%8F%A3%E5%B8%B8%E7%94%A8%E6%96%B9%E6%B3%95-toc" style="margin-left:40px;">(二)Collection接口常用方法

Collection%E6%8E%A5%E5%8F%A3%E9%81%8D%E5%8E%86%E5%85%83%E7%B4%A0%E7%9A%84%E6%96%B9%E5%BC%8F(Iterator%E5%92%8C%E5%A2%9E%E5%BC%BAfor)-toc" style="margin-left:40px;">(三)Collection接口遍历元素的方式(Iterator增强for)

Iterator(%E8%BF%AD%E4%BB%A3%E5%99%A8)-toc" style="margin-left:80px;">1.使用Iterator(迭代器)

Iterator(%E8%BF%AD%E4%BB%A3%E5%99%A8)%E4%BB%8B%E7%BB%8D-toc" style="margin-left:120px;">1.1Iterator(迭代器)介绍

Iterator(%E8%BF%AD%E4%BB%A3%E5%99%A8)%E6%89%A7%E8%A1%8C%E5%8E%9F%E7%90%86-toc" style="margin-left:120px;">1.2Iterator(迭代器)执行原理

Iterator%E4%BD%BF%E7%94%A8-toc" style="margin-left:120px;">1.3Iterator使用

(1)定义一个Student类

(2)创建一个ArrayList集合,并存入多个Student对象与其他元素:

(3)普通打印方式:

(4)使用迭代器遍历集合元素:

(5)迭代器遍历集合快捷键: 

(6)集合遍历完成后,如果再次使用iterator.next()方法,就会报错:

(7)如果想要再次遍历集合,需要对迭代器进行重置:

2.使用增强for循环

3.练习题:使用迭代器和for循环遍历同一个集合


一、集合框架体系(重要)

单列集合:集合中都是单个元素

双列集合:集合中存放的是键值对(K-V)

二、集合引入

(一)集合的理解与好处

        之前我们保存多个数据使用的是数组,但是数组也有不足的地方:

  1. 数组长度在开始时必须指定,而一旦指定,就不能再更改
  2. 数组保存的必须为同一类型的元素
  3. 使用数组进行增加/删除元素比较麻烦

例如:

给Person数组扩容:

Person[] pers = new Person[1];
per[0] = new Person();

给Person数组增加新的Person对象:

Person[] pers2 = new Person[pers.length+1]; // 创建新的Person数组
for(){} // 拷贝pers数组的元素到pers2
pers2[pers.length-1] = new Person(); // 添加新的对象

通过上述代码可以看出,数组扩缩容的灵活度较低,集合可以很好地解决这个问题。


集合的好处:

  1. 可以动态保存任意多个对象,使用比较方便
  2. 集合提供了一系列方便操作对象的方法:add、remove、set、get等
  3. 使用集合添加、删除新元素方便高效

Collection%E6%8E%A5%E5%8F%A3">三、Collection接口

Collection%E6%8E%A5%E5%8F%A3%E5%AE%9E%E7%8E%B0%E7%B1%BB%E7%9A%84%E7%89%B9%E7%82%B9">(一)Collection接口实现类的特点

public interface Collection<E> extends Iterable<E>
  1. collection实现子类可以存放多个元素,每个元素可以是Object
  2. 有些Collection的实现类,可以存放重复的元素,有些不可以
  3. 有些Collection的实现类,有些是有序的(List),有些无序的(Set)
  4. Collection接口没有直接的实现子类,是通过它的子接口List和Set来实现的

Collection%E6%8E%A5%E5%8F%A3%E5%B8%B8%E7%94%A8%E6%96%B9%E6%B3%95">(二)Collection接口常用方法

        因为接口不能被实例化,只有实现了接口的类才能被实例化,所以Collection接口常用的方法,以实现子类ArrayList来演示说明:

  1. add:添加元素

  2. remove:删除某个元素

  3. contains:查找指定元素是否存在

  4. size:返回元素的个数

  5. isEmpty:判断集合是否为空

  6. clear:清空集合中的数据

  7. addAll:添加多个元素

  8. containsAll:查找多个元素是否都存在

  9. removeAll:删除多个元素

public static void main(String[] args) {// 创建ArrayList对象,并用List接口来接收List list = new ArrayList();// 1.add:添加元素list.add("jack");list.add(10); // 相当于:list.add(new Integer(10));list.add(true);System.out.println("list=" + list);// 都采用了自动装箱,list中的元素都是对象,不再是基本数据类型// list=[jack, 10, true]// 2.remove:删除某个元素list.remove(0); // 根据索引删除list.remove("jack"); // 指定删除某个元素System.out.println("list=" + list); // list=[10, true]// 3.contains:查找指定元素是否存在System.out.println(list.contains("jack")); // false// 4.size:返回元素的个数System.out.println(list.size()); // 2// 5.isEmpty:判断集合是否为空System.out.println(list.isEmpty()); // false// 6.clear:清空集合中的数据list.clear();System.out.println("list=" + list); // list=[]// 7.addAll:添加多个元素ArrayList list2 = new ArrayList();list2.add("红楼梦");list2.add("三国演义");list.addAll(list2);System.out.println("list=" + list); // list=[红楼梦, 三国演义]// 8.containsAll:查找多个元素是否都存在System.out.println(list.containsAll(list2)); // true// 9.removeAll:删除多个元素list.add("聊斋");list.removeAll(list2);System.out.println("list=" + list); // list=[聊斋]
}

Collection%E6%8E%A5%E5%8F%A3%E9%81%8D%E5%8E%86%E5%85%83%E7%B4%A0%E7%9A%84%E6%96%B9%E5%BC%8F(Iterator%E5%92%8C%E5%A2%9E%E5%BC%BAfor)">(三)Collection接口遍历元素的方式(Iterator增强for)

Iterator(%E8%BF%AD%E4%BB%A3%E5%99%A8)">1.使用Iterator(迭代器)

Iterator(%E8%BF%AD%E4%BB%A3%E5%99%A8)%E4%BB%8B%E7%BB%8D">1.1Iterator(迭代器)介绍

        我们知道,Collection的所有子类都实现了Collection接口,但是Collection接口也继承了Iterable接口

public interface Collection<E> extends Iterable<E>

        Iterable接口有一个非常重要的抽象方法:通过这个iterator()方法,返回一个Iterator(迭代器)接口。通过Iterator接口,可以实现集合中所有元素的遍历。

        因此:凡是实现了Collection接口的子类,都可以获取到iterator()方法,从而获取到Iterator(迭代器)接口,最后实现集合中所有元素的遍历。

        注意:Iterator仅用于遍历集合,本身并不存放对象。

Iterator(%E8%BF%AD%E4%BB%A3%E5%99%A8)%E6%89%A7%E8%A1%8C%E5%8E%9F%E7%90%86">1.2Iterator(迭代器)执行原理

Iterator iterator = coll.iterator();  // 得到一个集合的迭代器

使用iterator的hasNext():判断是否还有下一个元素

while(iterator.hasNext()){

        调用next()方法:1.下移  2.将下移以后的集合位置上的元素返回

        System.out.println(iterator.next());

}

        注意:在调用iterator.next()方法之前,必须要调用iterator.hasNext()进行检测。如果不调用,且下一条记录无效,直接调用iterator.next()会抛出NoSuchElementException异常。

Iterator%E4%BD%BF%E7%94%A8" style="background-color:transparent;">1.3Iterator使用
(1)定义一个Student类
class Student {private String name;private String author;private double price;public Student(String name, String author, double price) {this.name = name;this.author = author;this.price = price;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +'}';}
}
(2)创建一个ArrayList集合,并存入多个Student对象与其他元素:
public class CollectionIterator {public static void main(String[] args) {Collection coll = new ArrayList();coll.add(new Student("三国演义", "罗贯中", 41.5));coll.add(new Student("红楼梦", "曹雪芹", 31.58));coll.add(new Student("西游记", "吴承恩", 65.74));coll.add(new Student("水浒传", "施耐庵", 76.24));coll.add("marry");}
}
(3)普通打印方式:
System.out.println("coll=" + coll);
// coll=[Student{name='三国演义', author='罗贯中', price=41.5},
// Student{name='红楼梦', author='曹雪芹', price=31.58},
// Student{name='西游记', author='吴承恩', price=65.74},
// Student{name='水浒传', author='施耐庵', price=76.24}, marry]
(4)使用迭代器遍历集合元素:
// 对coll集合进行遍历:
// 1.先得到coll对应的迭代器
Iterator iterator = coll.iterator();
// 2.使用while循环遍历
while (iterator.hasNext()) {// 返回Object类型是因为集合中可以存放各种类型的数据// 编译类型虽然是Object,但是运行类型还要看集合中真正存放的数据类型Object next = iterator.next();System.out.println(next);
}
/*
Student{name='三国演义', author='罗贯中', price=41.5}
Student{name='红楼梦', author='曹雪芹', price=31.58}
Student{name='西游记', author='吴承恩', price=65.74}
Student{name='水浒传', author='施耐庵', price=76.24}
marry*/
(5)迭代器遍历集合快捷键: 

使用迭代器快捷键 itit + 回车
显示所有快捷键的快捷键:Ctrl + J 

(6)集合遍历完成后,如果再次使用iterator.next()方法,就会报错:
// 当退出while循环后,这时iterator迭代器指向最后的元素
// iterator.next(); // 会抛出NoSuchElementException
(7)如果想要再次遍历集合,需要对迭代器进行重置:
iterator = coll.iterator();
while (iterator.hasNext()) {Object obj = iterator.next();System.out.println(obj);
}

2.使用增强for循环

        增强for循环底层使用的仍然是iterator迭代器,是iterator的简化版。增强for循环只能用于遍历集合或数组。

基本语法:

for(元素类型 元素名 : 集合名或数组名){访问元素
}

代码示例: 

public class CollectionFor {public static void main(String[] args) {Collection coll = new ArrayList();coll.add(new Student("三国演义", "罗贯中", 41.5));coll.add(new Student("红楼梦", "曹雪芹", 31.58));coll.add(new Student("西游记", "吴承恩", 65.74));coll.add(new Student("水浒传", "施耐庵", 76.24));coll.add("marry");// 使用增强for遍历集合for (Object element : coll) {System.out.println(element);}/*** Student{name='三国演义', author='罗贯中', price=41.5}* Student{name='红楼梦', author='曹雪芹', price=31.58}* Student{name='西游记', author='吴承恩', price=65.74}* Student{name='水浒传', author='施耐庵', price=76.24}* marry*/}
}

3.练习题:使用迭代器和for循环遍历同一个集合

public class CollectionExercise {public static void main(String[] args) {// 这里也可以使用List接收,因为接口的多态性// List实现了Collection接口,也可以调用iteratorList list = new ArrayList();list.add(new Dog("斑点狗", 2));list.add(new Dog("哈士奇", 3));list.add(new Dog("阿拉斯加", 1));// 迭代器Iterator iterator = list.iterator();while (iterator.hasNext()) {Object dog = iterator.next();System.out.println(dog);}// 增强forfor (Object dog : list) {System.out.println(dog);}}
}class Dog {private String name;private int age;public Dog(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}
}

http://www.ppmy.cn/embedded/125253.html

相关文章

大数据新视界 --大数据大厂之 Presto 性能优化秘籍:加速大数据交互式查询

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

SparkSQL-性能调优

祝福 在这个举国同庆的时刻&#xff0c;我们首先献上对祖国的祝福&#xff1a; 第一&#xff0c;我们感谢您给我们和平的环境&#xff0c;让我们能快乐生活 第二&#xff0c;祝福我们国家未来的路越走越宽广&#xff0c;科技更发达&#xff0c;人民更幸福 第三&#xff0c;…

Cobalt Strike

信息收集 主机信息收集 # ip信息 shell ipconfig # 系统信息&#xff0c;补丁信息 shell systeminfo # 架构 shell echo %PROCESSOR_ARCHITECTURE% # 软件信息 shell wmic product get name,version # 查看安装服务 shell wmic service list brief # 查看运行进程 shell tal…

大学生就业市场:Spring Boot招聘系统的设计与实现

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

PostgreSQL的pglz使用限制

PostgreSQL的pglz使用限制 在 PostgreSQL 中&#xff0c;PGLZ&#xff08;PostgreSQL Lightweight Compression Algorithm&#xff09;是一种用于压缩数据的算法&#xff0c;主要用于 TOAST&#xff08;The Oversized-Attribute Storage Technique&#xff09;机制。PGLZ 的使…

简历投递经验01

嵌入式简历制作指南与秋招求职建议 技术要求概览 在嵌入式领域求职时&#xff0c;技术能力是HR和面试官最关注的点之一。以下是一些关键技术点&#xff0c;以及它们在简历中的体现方式。 1. 编程语言与开发环境 掌握C/C语言。熟悉至少一种单片机或微处理器的开发环境。 2.…

数据科学基础复习(简)

可视化、数据可视化 在狭义上&#xff0c;数据可视化是与信息可视化&#xff0c;科学可视化和可视分析学平行的概念&#xff0c;而在广义上数据可视化可以包含这3类可视化技术。 数据科学的主要任务 数据科学研究目的与任务 大数据及其运动规律的揭示从数据到智慧的转化数据…

HC32L17x的LL驱动库

这个库是参考ST的LL库格式&#xff0c;个人维护和调试的库&#xff1b;本库开源在21.ic网站&#xff1b;在这个网站上有完整的驱动库和配套的文件&#xff1a;链接如下&#xff1a;华大L17x模拟ST的LL库编写的驱动库 - - 21ic电子技术开发论坛&#xff1b; 备注&#xff1a;由于…