Collection迭代器和增强for

简介: Collection迭代器和增强for

在 Java 中,Collection 接口提供了一种通用的方式来处理一组对象,它定义了一些常用的操作方法,例如添加、删除和遍历元素等。可以使用迭代器(Iterator)来遍历 Collection 中的元素。

以下是如何使用迭代器遍历Collection 的示例代码:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionIterator {
    public static void main(String[] args) {
        // 创建一个 ArrayList 对象
        Collection<String> collection = new ArrayList<>();
        // 向集合中添加元素
        collection.add("Apple");
        collection.add("Banana");
        collection.add("Orange");
        // 获取迭代器
        Iterator<String> iterator = collection.iterator();
        // 使用迭代器遍历集合元素
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);
        }
    }
}

需要注意的是,一旦使用迭代器开始遍历集合,就不能通过集合对象直接进行增删操作,否则可能会引发 ConcurrentModificationException 异常。如果需要在遍历过程中对集合进行增删操作,建议使用迭代器的 remove() 方法来进行操作。

增强for循环(Enhanced for Loop),也被称为for-each循环,是 Java 提供的一种简化遍历数组或集合的语法结构。源码其实就是迭代器

以下是使用增强for循环来遍历数组和集合的示例代码:

1.遍历数组

int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
    System.out.println(number);
}

2.遍历集合

List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
for (String fruit : fruits) {
    System.out.println(fruit);
}

增强for循环的语法结构为

for (元素类型 元素变量 : 遍历对象) {
    // 执行循环体操作
}

 

在每次循环迭代时,将遍历对象中的下一个元素赋值给指定的元素变量,然后执行循环体中的操作。对于数组,元素变量的类型必须与数组元素的类型匹配;对于集合,元素变量的类型必须与集合元素的类型匹配。

增强for循环可以更简洁地遍历数组和集合,避免了手动使用索引或迭代器。但是,增强for循环不能进行修改操作,仅适用于读取元素值。

 

如果需要在遍历过程中修改数组或集合的元素,不适合使用增强for循环。增强for循环只能用于读取元素值,并且不能通过元素变量修改原始数组或集合的元素。

如果要修改数组的元素,可以使用传统的for循环,并通过索引来访问和修改元素的值。示例如下:

int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) {
    numbers[i] = numbers[i] * 2;
}
// 打印修改后的数组值
for (int number : numbers) {
    System.out.println(number);
}

如果要修改集合的元素,可以使用传统的for循环结合集合的 set() 方法来进行修改。示例如下:

List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
for (int i = 0; i < fruits.size(); i++) {
    String fruit = fruits.get(i);
    fruits.set(i, fruit.toUpperCase());
}
// 打印修改后的集合元素
for (String fruit : fruits) {
    System.out.println(fruit);
}

 

add方法可以插入,插入点之后的数据索引+1;


相关文章
|
SQL 运维 关系型数据库
如何对比MySQL主备数据的一致性?
如何在数据库世界中处理大批量数据变更操作,而不影响业务运行。NineData的OnlineDML解决方案通过无锁方式实现数据变更,确保在线业务的顺畅运行。只需两步操作即可开启OnlineDML功能,让NineData自动处理大型DML操作,分批执行并根据数据库压力进行智能调整,简化操作流程并提供直观操作界面。
599 2
如何对比MySQL主备数据的一致性?
3GPP相应的5G UDN场景及性能需求 | 带你读《5G UDN(超密集网络)技术详解》之十九
相比 IMT-2020 推进组,3GPP 对 5G UDN 场景的研究更加具有针对性。 在业务应用独立式部署(SA)技术组的研究中,与 UDN 相关的场景都是服务 室内用户的,具体有两种:办公室和热点区域。
3GPP相应的5G UDN场景及性能需求 | 带你读《5G UDN(超密集网络)技术详解》之十九
|
12月前
|
供应链 数据可视化 安全
Leangoo 化解医药行业痛点,助力各领域发展
Leangoo 针对医药行业痛点,如制药研发周期长、生物技术创新协同难等问题,提供解决方案。通过看板功能实现信息共享、流程优化和协同增效,提升各领域效率与质量,促进医药行业整体进步。覆盖制药、生物技术、医疗器械及医疗保健服务四大领域,助力项目管理、供应链协调、市场推广及服务质量提升。
|
消息中间件 SQL RocketMQ
RocketMQ-初体验RocketMQ(10)-过滤消息_SQL92表达式筛选消息
RocketMQ-初体验RocketMQ(10)-过滤消息_SQL92表达式筛选消息
361 0
|
设计模式 测试技术 PHP
深入解析 Laravel 中的依赖注入
【8月更文挑战第31天】
418 0
|
SQL 缓存 Oracle
SqlAlchemy 2.0 中文文档(五十九)(1)
SqlAlchemy 2.0 中文文档(五十九)
366 0
|
存储 NoSQL Java
分布式锁,Redission,其它实现问题讲解,以及面试题回答案例
分布式锁,Redission,其它实现问题讲解,以及面试题回答案例
609 1
【Python 基础】Python中的实例方法、静态方法和类方法有什么区别?
【5月更文挑战第6天】【Python 基础】Python中的实例方法、静态方法和类方法有什么区别?
|
前端开发 Java Maven
SpringMVC之初识SpringMVC和项目创建
【1月更文挑战第18天】 一、SpringMVC简介 1、什么是MVC 2、什么是SpringMVC 3、SpringMVC的特点 二、SpringMVC项目创建步骤 1、创建maven工程 a>添加web模块 b>打包方式:war c>引入依赖 2、配置web.xml a>默认配置方式 b>扩展配置方式 3、创建请求控制器 4、创建springMVC的配置文件 5、测试HelloWorld a>实现对首页的访问 b>通过超链接跳转到指定页面
258 0
|
SQL 关系型数据库 MySQL
边锋 x AnalyticDB MySQL:打造一站式游戏数据分析平台
杭州边锋网络技术有限公司是国内领先的休闲游戏开发商、运营商、发行商。20余年来,边锋网络一直是中国棋牌游戏的开拓者和变革者。  边锋网络市场覆盖20余个省份,注册用户过亿,月活跃用户上千万,是国家级重点软件企业(一类)。公司大数据分析系统"反应堆"目前支持着包括雀神广东麻将、边锋斗地主、蜀山四川麻将、功夫川麻等10余款休闲游戏产品;