• java解析遍历List集合(其实现子类)的三种方式


    java解析遍历List集合(其实现子类)的三种方式

    1 使用迭代器对象

    1.1 底层

    1.1.1 List接口继承了Collection接口
    在这里插入图片描述

    1.1.2 而Collection接口又继承了Iterable接口
    在这里插入图片描述

    1.1.3 Iterable接口里面有个抽象方法Iterator iterator();
    在这里插入图片描述

    因此Colleciton接口和List接口里面都会有Iterator iterator()这个抽象方法

    List接口的下面的实现子类,一定会重写Iterator iterator(),目的是用于返回一个迭代器对象,通过迭代器对象可以去遍历集合里面的元素,因此这个方法是可行的
    在这里插入图片描述

    1.2 核心思路

    1.2.1 使用iterator()方法获取迭代器对象i1

    1.2.3 使用迭代器对象i1.hasNext()去判断集合当中是否还有有效元素

    1.2.4 若hasNext()方法返回为true就通过迭代器对象i1.next()方法去进行获取集合中的有效元素

    注意:因为要遍历集合,所以需要用循环,循环条件为hasNext(),循环体语句为: next()获取集合中的有效元素,然后通过System.out.println()去进行打印

    1.3 示例代码

    package Work;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class ListTest {
        public static void main(String[] args) {
            List list=new ArrayList();
            list.add("123");
            list.add(true);
            list.add(10.5);
            list.add(10.9f);
            Iterator iterator=list.iterator();
            System.out.println("使用迭代器遍历的结果为:");
            while(iterator.hasNext()){
                System.out.println(iterator.next());
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    1.4 示例代码运行截图

    在这里插入图片描述

    2 使用for循环遍历

    2.1 底层

    2.1.1 遍历范围的确定

    Collection接口下面有个抽象方法size();

    List接口是Collection的子接口,因此也有size()方法

    然后其实现类会重写size()方法去获取集合中有效元素的个数,这个时候我们就相当于可以去确定集合遍历的范围

    2.1.2 获取每个元素

    List接口有get(int index)方法,其实现类重写了该方法,因此可以通过它获取对应位置上的元素

    2.2 核心思路

    2.2.1 通过size()方法去获取集合遍历的范围

    2.2.2 通过get(int index)方法去指定位置元素的个数

    2.2.3 两者结合起来,就可以通过for循环来遍历取出集合中的每个元素了

    2.3 示例代码

    package Work;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class ListTest {
        public static void main(String[] args) {
            List list=new ArrayList();
            list.add("123");
            list.add(true);
            list.add(10.5);
            list.add(10.9f);
            System.out.println("使用for循环遍历(List接口下面的实现子类特有的遍历方式)");
            //for循环遍历只有List接口下面的实现子类才能用,Set接口下面的不能这么用
            for (int i = 0; i <list.size(); i++) {
                System.out.println(list.get(i));
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    2.4 示例代码运行截图

    在这里插入图片描述

    3 使用foreach循环进行遍历

    3.1 底层

    粗略理解成封装好了的简单的迭代器;通过hasNext()去判断集合中是否还有有效元素,通过next()获取元素并把值赋值给Object o 这个对象,然后通过输出语句打印Object对象o的信息

    3.1 核心思路

    3.1 冒号左侧写next()方法返回的类型 名字,若没有写泛型,那么就为Object o

    3.2 冒号右侧写集合实现子类的对象名

    补充: 集合中的foreach语法如下所示:

    for(迭代器的next()方法的返回值类型 标识符:集合实现类对象名){
        System.out.println(标识符);
        //迭代器的next()方法的返回值类型可以简单理解成集合里面可以存放元素的类型
        //若可以存放任意元素,则返回值类型为Object,若只能存放整型,就返回Integer
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.2 示例代码

    package Work;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class ListTest {
        public static void main(String[] args) {
            List list=new ArrayList();
            list.add("123");
            list.add(true);
            list.add(10.5);
            list.add(10.9f);
            //该集合中可以插入任意元素,因此底层调用迭代器对象.next()方法时所返回的类型为Object
            System.out.println("用foreach(增强for循环,底层调用的是简单的迭代器)的遍历结果为:");
            for (Object o: list
                 ) {
                System.out.println(o);
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    3.3 示例代码运行截图

    在这里插入图片描述

  • 相关阅读:
    【Pytorch和深度学习】栏目导读
    2022年湖北武汉建设厅特种作业操作证书如何获取?怎么报考呢?
    基于Keras搭建CNN、TextCNN文本分类模型
    常用彩色模型及转换
    缩短从需求到上线的距离:集成多种工程实践的稳定框架 | 开源日报 No.55
    TCP--三次握手和四次挥手
    05 RocketMQ - Consumer 源码分析
    FAST-LIO公式推导
    Springboot漫画网站j846u计算机毕业设计-课程设计-期末作业-毕设程序代做
    算法竞赛进阶指南 货仓选址
  • 原文地址:https://blog.csdn.net/SSS4362/article/details/126128456