Collection集合的遍历方式

  • 方式一:迭代器
  • (1)迭代器遍历概述
  • (2)Collection集合获取迭代器
  • (3)Iterator中的常用方法
  • (4)总结
  • 方式二:foreach/ 增强for循环
  • (1)增强for循环
  • (2)格式
  • (3)总结
  • 方式三:lambda表达式
  • (1)Lambda表达式遍历集合
  • (2)Collection结合Lambda遍历的API


方式一:迭代器

(1)迭代器遍历概述

●遍历就是一个一个的把容器中的元素访问一遍。
●迭代器在Java中的代表是Iterator, 迭代器是集合的专用遍历方式。

(2)Collection集合获取迭代器

方法名称

说明

Iterator iterator( )

返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引

(3)Iterator中的常用方法

方法名称

说明

boolean hasNext()

询问当前位置是否有元素存在,存在返回true,不存在返回false

E next()

获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界

Collection<String> lists = new ArrayList<>();
        lists.add("one");
        lists.add("two");
        lists.add("three");
        lists.add("four");
        System.out.println(lists);
        //[one, two, three, four]

        //1.得到当前集合的迭代器对象
        Iterator<String> it = lists.iterator();
        String s = it.next();
        System.out.println(s);//one
        System.out.println(it.next());//two
        System.out.println(it.next());//three
        System.out.println(it.next());//four
        //System.out.println(it.next());//NoSuchElementException 出现无此元素异常的错误
Collection<String> lists = new ArrayList<>();
        lists.add("one");
        lists.add("two");
        lists.add("three");
        lists.add("four");
        System.out.println(lists);
        //[one, two, three, four]

        //1.得到当前集合的迭代器对象
        Iterator<String> it = lists.iterator();
//        String s = it.next();
//        System.out.println(s);//one
//        System.out.println(it.next());//two
//        System.out.println(it.next());//three
//        System.out.println(it.next());//four
//        //System.out.println(it.next());//NoSuchElementException 出现无此元素异常的错误

        //2.定义while循环
        while (it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }

Java使用迭代器遍历的优点 java迭代器遍历集合_System

(4)总结

1、迭代器的默认位置在哪里。
●Iterator iterator():得到迭代器对象,默认指向当前集合的索引0

2、迭代器如果取元素越界会出现什么问题。
●会出现NoSuchElementException异常。

方式二:foreach/ 增强for循环

(1)增强for循环

●增强for循环:既可以遍历集合也可以遍历数组。
●它是JDK5之后出现的,其内部原理是一个Iterator迭代器,遍历集合相当于是迭代器的简化写法。
●实现Iterable接 口的类才可以使用迭代器和增强for, Collection接口已经实现了Iterable接口。

(2)格式

Java使用迭代器遍历的优点 java迭代器遍历集合_Java使用迭代器遍历的优点_02


Java使用迭代器遍历的优点 java迭代器遍历集合_idea_03

Collection<String> lists = new ArrayList<>();
        lists.add("one");
        lists.add("two");
        lists.add("three");
        lists.add("four");
        System.out.println(lists);
        //[one, two, three, four]

        //遍历集合
        for (String s : lists) {
            System.out.println(s);
        }

        System.out.println("-----------------------");
        //遍历数组
        double[] scores = {59.5,60,99,88};
        for (double score : scores) {
            System.out.println(score);
        }

Java使用迭代器遍历的优点 java迭代器遍历集合_idea_04


注意:修改变量的值时,数组的内容不会改变

//遍历数组
        double[] scores = {59.5,60,99,88};
        System.out.println(Arrays.toString(scores));
        for (double score : scores) {
            System.out.println(score);
            if (score == 60){
                score = 66;//修改无意义,不会影响数组的元素值
            }
        }
        System.out.println(Arrays.toString(scores));

Java使用迭代器遍历的优点 java迭代器遍历集合_学习_05

(3)总结

1、 增强for可以遍历哪些容器?
●既可以遍历集合也可以遍历数组。

2、增强for的关键是记住它的遍历格式

方式三:lambda表达式

(1)Lambda表达式遍历集合

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

(2)Collection结合Lambda遍历的API

方法名称

说明

default void forEach(Consumer<? super T> action):

结合lambda遍历集合

Java使用迭代器遍历的优点 java迭代器遍历集合_System_06

Collection<String> lists = new ArrayList<>();
        lists.add("one");
        lists.add("two");
        lists.add("three");
        lists.add("four");
        System.out.println(lists);
        //[one, two, three, four]

//        lists.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }

        //化简
//        lists.forEach(s ->  {
//                System.out.println(s);
//        });

        //再化简
//        lists.forEach(s -> System.out.println(s));

        //继续化简
        lists.forEach(System.out::println);