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



目录
相关文章
|
4月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
|
6月前
(Collection)集合遍历,进阶
(Collection)集合遍历,进阶
|
6月前
|
Java 索引
JavaSE——集合框架一(3/7)-List系列集合:特点、方法、遍历方式、ArrayList集合的底层原理
JavaSE——集合框架一(3/7)-List系列集合:特点、方法、遍历方式、ArrayList集合的底层原理
45 2
|
6月前
|
存储 Java 索引
JavaSE——集合框架一(6/7)-Set系列集合:LinkedHashSet的底层原理、TreeSet集合(介绍,自定义排序规则,排序示例)
JavaSE——集合框架一(6/7)-Set系列集合:LinkedHashSet的底层原理、TreeSet集合(介绍,自定义排序规则,排序示例)
43 1
|
6月前
|
Java
JavaSE——集合框架一(4/7)-List系列集合:LinkedList集合的底层原理、特有方法、队列、栈
JavaSE——集合框架一(4/7)-List系列集合:LinkedList集合的底层原理、特有方法、队列、栈
47 0
|
7月前
|
Java 索引
【java进阶】集合的三种遍历(迭代器、增强for、Lambda)
【java进阶】集合的三种遍历(迭代器、增强for、Lambda)
175 0
【java进阶】集合的三种遍历(迭代器、增强for、Lambda)
|
存储 Java API
Java集合之List集合(下)
Java集合之List集合(上)
71 0
|
存储 Java 索引
Java集合之List集合(上)
Java集合之List集合
98 0
|
Kotlin
Kotlin 中List集合,Set集合,Map集合,数组的详解
Kotlin 中List集合,Set集合,Map集合,数组的详解
101 0
|
存储 Java 索引
Java开发——22.Collection单列集合+迭代器+增强for循环
集合,是Java提供的一种容器,可以用来存储多个数据,并且可以存储任意类型
Java开发——22.Collection单列集合+迭代器+增强for循环