8

java日常开发必备:list的四种遍历 - 良工说技术

 2 years ago
source link: https://www.cnblogs.com/teach/p/16551297.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

java日常开发必备:list的四种遍历

在平时的开发过程中使用List的场景很多,你知道List的遍历有多少种方式?今天一起来梳理下List的几种遍历方式。这里以java.util.ArrayList为例来演示。

这里有一个最简单的测试类,里边有一个main方法

package com.my.template.service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
 * @date 2022/8/2 18:12
 */
public class TestList {
    public static void main(String[] args) {
        List<String> list=new ArrayList<String>();

        list.add("hello");
        list.add("ArrayList");
        list.add("!");
        simpleTraverse(list);
    }
}

1.最简单的方式

这种方式是最简单的,也是最容易想到的。

/**
     * 最简单的遍历方式
     * @param list
     */
    public static void simpleTraverse(List<String> list){
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    }

这种方法就是把List当作一个数组,从数组的第一个位置开始循环到数组的最后位置,有以下几点需要注意,

  1. i的初始值为0,因为数组的第一个下标为0;
  2. 临界值为list的长度-1,也就是“i<list.size()”或“i<=list.size()-1”,这两种均可;

打印结果为:

hello
ArrayList
!

这种方式初学者都会的遍历方式,下面看高级点。

2.foreach的遍历方式

上面的遍历方式,下面来看下高级的遍历方法,

/**
     * 进阶版的遍历方式,foreach
     * @param list
     */
    public static void forEachTraverse(List<String> list){
        for (String str:list) {
            System.out.println(str);
        }
    }

这种方式是利用foreach的用法,很多人不清楚foreach的底层是什么样子的,在idea中找到class文件,看下反编译过来的代码,

985599-20220804161244642-1285417378.png

从反编译过滤的代码可以看到foreach底层其实是使用的迭代器的方式,也就是下面要说的遍历方式。

3.迭代器的遍历方式

List可以使用迭代器的方式进行遍历是有原因的,因为在list的实现类中均实现了Iterator接口。看下ArrayList中对Iterator接口的实现,

985599-20220804170057365-1439722426.png

在ArrayList中有静态内部类Itr,该类实现了Iterator接口。同时ArrayList提供了iterator()方法,

985599-20220804170426922-1983155583.png

这样就可以使用迭代器了。看下迭代器模式的遍历方式,

/**
     * 迭代器的遍历方式
     * @param list
     */
    public static void iteratorTraverse(List<String> list){
        Iterator<String> iterator=list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

看下是不是也是很简单。下面看最后一种遍历方式,流式遍历。

4.流式的遍历方式

所谓流式的遍历,是java8提供的最新的方式,

/**
     * 流式遍历
     * @param list
     */
    public static void streamTraverse(List<String> list){
        list.stream().forEach(str->{
            System.out.println(str);
        });
    }

是不是很简单,对于stream()的API后边会专门分析,这里知道这种遍历方式即可,有兴趣的可以先看看该种方式的实现。

总结,本文主要梳理里在日常的开发过程中对List的遍历方式,没有最好的方式只有适合自己的。

推荐阅读

springboot的@ConditionalOnClass注解

springboot的@ConditionalOnBean注解

深入理解springboot的自动注入

我的第一个springboot  starter

985599-20220804171942340-1793843967.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK