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

目录

Collection的遍历方式

迭代器

增强for循环(foreach)

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


学习自:黑马程序员——JavaSE课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值