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.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));
        }
    }
}

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
}

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);
        }
    }
}

3.3 示例代码运行截图

在这里插入图片描述

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值