JavaSE——集合框架一(2/7)-Collection集合的遍历方式-迭代器、增强for循环、Lambda、案例

简介: JavaSE——集合框架一(2/7)-Collection集合的遍历方式-迭代器、增强for循环、Lambda、案例

Collection的遍历方式

迭代器

  • 选代器是用来遍历集合的专用方式(数组没有选代器),在Java中选代器的代表是lterator

Collection集合获取选代器的方法

方法名称 说明
Iterator<E>  iterator() 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素

Iterator选代器中的常用方法

方法名称 说明
boolean hasNext() 询问当前位置是否有元素存在,存在返回true,不存在返回false
E next() 获取当前位置的元素,并同时将选代器对象指向下一个元素处。

具体实现

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
 
public class IteratorDemo {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("凌翔茜");
        c.add("蒋川");
        c.add("余周周");
        c.add("林杨");
        System.out.println(c);
        //c = [凌翔茜, 蒋川, 余周周, 林杨]
 
        //使用迭代器遍历集合
        //1.从集合对象中获取迭代器对象
        Iterator<String> it = c.iterator();
        //2.结合循环进行遍历
        while(it.hasNext()){
            String ele = it.next();
            System.out.println(ele);
        }
    }
}

运行结果:


它的执行流程是:

首先迭代器对象指向的是集合中的第一个元素,来到第一行代码,hasNext方法先查看当前位置是否有元素,只要有元素就执行while循环;然后next方法获取到当前位置的元素,同时将迭代器指向下一个元素的位置,一次循环结束则输出一个元素,直到hasNext查看到当前位置已无元素,则循环结束,集合遍历完成。


注意:不能一次性输出集合内的2个或2个以上的元素值,这样有极大的可能会造成异常。


(例如最后一个元素时,next方法再指向下一个元素值,已经是为null值了,不允许再继续访问了)


例如:


增强for循环(foreach)

  • 增强for可以用来遍历集合或者数组。
  • 增强for遍历集合,本质就是迭代器遍历集合的简化写法。

格式

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

}

Collection<String> c = new ArrayList<>();
...
for(String s:c){
    System.out.println(s);
}

具体实现

package user.Collection;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
 
public class IteratorDemo {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("凌翔茜");
        c.add("蒋川");
        c.add("余周周");
        c.add("林杨");
 
        //使用增强for遍历集合或者数组
        for (String ele:c) {
            System.out.println(ele);
        }
 
        System.out.println();
 
        String[] names = {"赵敏","小昭","素素","灭绝"};
        for (String name:names){
            System.out.println(name);
        }
    }
}

运行结果:


Lambda表达式遍历集合

  • 得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的方式来遍历集合。

需要使用Collection的如下方法来完成

方法名称 说明
default void forEach(Consumer<?  super  T>  action) 结合Lambda遍历集合

具体实现

package user.Collection;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.function.Consumer;
 
public class IteratorDemo {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("凌翔茜");
        c.add("蒋川");
        c.add("余周周");
        c.add("林杨");
 
        //default void forEach(Consumer<? super T> action):结合Lambda表达式遍历集合
        c.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
 
        c.forEach( s -> System.out.println(s) );
 
        c.forEach( System.out::println);
    }
}

运行结果应该是循环遍历了三次集合的:


案例

需求与分析

需求:展示多部电影信息。(电影展示信息不限)

完成这个案例的目的

  1. 加深对集合遍历的掌握
  2. 回顾一下集合存储对象的特点

分析

  1. 每部电影都是一个对象,多部电影要使用集合装起来。
  2. 遍历集合中的3个电影对象,输出每部电影的详情信息。

代码部分

定义电影类

public class Movie {
    private String name;
    private double score;
    private String actor;
 
    public Movie() {
    }
 
    public Movie(String name, double score, String actor) {
        this.name = name;
        this.score = score;
        this.actor = actor;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public double getScore() {
        return score;
    }
 
    public void setScore(double score) {
        this.score = score;
    }
 
    public String getActor() {
        return actor;
    }
 
    public void setActor(String actor) {
        this.actor = actor;
    }
 
    @Override
    public String toString() {
        return "Movie{" +
                "name='" + name + '\'' +
                ", score=" + score +
                ", actor='" + actor + '\'' +
                '}';
    }
}

主程序

import java.util.ArrayList;
import java.util.Collection;
 
public class MovieTest {
    public static void main(String[] args) {
        //1.创建一个集合容器负责存储多部电影信息
        Collection<Movie> movies = new ArrayList<>();
        movies.add(new Movie("肖申克的救赎",9.7,"罗宾斯"));
        movies.add(new Movie("霸王别姬",9.6,"张国荣、张丰毅"));
        movies.add(new Movie("阿甘正传",9.5,"汤姆.汉克斯"));
        System.out.println(movies);
 
        for(Movie movie:movies){
            System.out.println("电影名: " + movie.getName());
            System.out.println("评分: " + movie.getScore());
            System.out.println("主演: " + movie.getActor());
            System.out.println("-----------------------------------------------------");
        }
    }
}

运行结果


END



目录
相关文章
|
JavaScript
原生js实现复选框(全选/全不选/反选)效果【含完整代码】
原生js实现复选框(全选/全不选/反选)效果【含完整代码】
387 1
|
JavaScript 前端开发 数据安全/隐私保护
Vue封装组件并发布到npm仓库
前言 使用Vue框架进行开发,组件封装是一个很常规的操作。一个封装好的组件可以在项目的任意地方使用,甚至我们可以直接从npm仓库下载别人封装好的组件来进行使用,比如iview、element-ui这一类的组件库。但是每个公司的业务场景可能不同,开发人员还是得必须封装自己得组件,如果换了一个项目,那么我们就只能复制组件代码到新的项目里面去了,这样稍显麻烦,其实我们可以将组建上传到npm仓库,要用的时候可以直接从npm安装使用。 总结下来有两点好处: 方面使用,任何项目无缝衔接。 可作为开源项目,积累经验。
880 0
Vue封装组件并发布到npm仓库
|
SQL 关系型数据库 MySQL
十九、禁止ROOT用户远程登录
十九、禁止ROOT用户远程登录
767 0
|
1月前
|
安全 网络协议 网络安全
2025年第十六届蓝桥杯网络安全CTF国赛总决赛真题详解Writeup(Web漏洞挖掘、Crypto密码学、Misc杂项、Reverse逆向、Pwn二进制漏洞)
2025年第十六届蓝桥杯网络安全CTF国赛总决赛真题详解Writeup(Web漏洞挖掘、Crypto密码学、Misc杂项、Reverse逆向、Pwn二进制漏洞)
2025年第十六届蓝桥杯网络安全CTF国赛总决赛真题详解Writeup(Web漏洞挖掘、Crypto密码学、Misc杂项、Reverse逆向、Pwn二进制漏洞)
|
4月前
|
机器学习/深度学习 算法 数据可视化
混合效应模型原理与实现:从理论到代码的完整解析
混合效应模型并非神秘的技术,而是普通回归方法在层次化结构建模方面的原理性扩展。这种理解将成为机器学习工具箱中下一个技术突破的重要基础。
326 1
混合效应模型原理与实现:从理论到代码的完整解析
|
6月前
|
机器学习/深度学习 人工智能 编解码
告别潜在空间的黑箱操作,直接在原始像素空间建模!PixelFlow:港大团队开源像素级文生图模型
香港大学与Adobe联合研发的PixelFlow模型,通过流匹配和多尺度生成技术实现像素级图像生成,在256×256分辨率任务中取得1.98的FID分数,支持端到端训练并突破传统模型对预训练VAE的依赖。
259 36
告别潜在空间的黑箱操作,直接在原始像素空间建模!PixelFlow:港大团队开源像素级文生图模型
|
9月前
|
存储 人工智能 分布式计算
湖仓实时化升级 :Uniflow 构建流批一体实时湖仓
本文整理自阿里云产品经理李昊哲在Flink Forward Asia 2024流批一体专场的分享,涵盖实时湖仓发展趋势、基于Flink搭建流批一体实时湖仓及Materialized Table优化三方面。首先探讨了实时湖仓的发展趋势和背景,特别是阿里云在该领域的领导地位。接着介绍了Uniflow解决方案,通过Flink CDC、Paimon存储等技术实现低成本、高性能的流批一体处理。最后,重点讲解了Materialized Table如何简化用户操作,提升数据查询和补数体验,助力企业高效应对不同业务需求。
862 18
湖仓实时化升级 :Uniflow 构建流批一体实时湖仓
|
10月前
|
数据采集 数据安全/隐私保护 Python
【Python】已解决:urllib.error.HTTPError: HTTP Error 403: Forbidden
通过上述方法,可以有效解决 `urllib.error.HTTPError: HTTP Error 403: Forbidden` 错误。具体选择哪种方法取决于服务器对请求的限制。通常情况下,添加用户代理和模拟浏览器请求是最常见且有效的解决方案。
628 10
|
10月前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
209 1
|
人工智能 物联网 测试技术
以小博大,微软开源27亿参数模型Phi-2,魔搭最佳实践来啦!
近日,微软公布了在 Microsoft Ignite 2023大会上宣布开源的 Phi-2 模型的更多细节,“打破传统语言模型缩放定律,可PK比自己大25倍的模型”、“以小博大”等评价,让Phi-2一时间在开源社区中引发关注。