list最常用的遍历五种方式以及使用场景

目录

遍历方式的适用场景对比

迭代器遍历

列表迭代器

 增强for遍历

 Lambda表达式

lambda表达式简介

 普通for遍历

集合中通用的并且常用的六种方法


遍历方式的适用场景对比

迭代器遍历 :在遍历过程中需要删除元素,请使用迭代器

列表迭代器: 在遍历过程中需要添加元素,请使用列表迭代器

增强for遍历: 仅仅需要遍历

lambda表达式:仅仅需要遍历

普通for: 如果便利的时候想操作索引,可以使用普通for

迭代器遍历

首先定义一个list,之后添加数据到list当中,定义出一个迭代器,之后采用迭代器的next方法进行判断有没有元素,有的话就进行返回当前元素的值,之后在进行移动指针到下一位

 public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add(111);
        list.add(222);
        list.add(333);
        /** 定义一个迭代器
         * hasNext方法判断是否有该元素
         * next方法 将当前结果返回 并指向下一位
         * */
        Iterator it = list.iterator();
        while (it.hasNext()){
            Integer val = it.next();
            System.out.println(val);
        }

    }

如果我在遍历过程中需要删除某个元素,就可以采用下面这种写法,注意要用迭代器提供的remove方法进行删除,不然代码会报异常

public class ListTest {
    public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add(111);
        list.add(222);
        list.add(333);
        /** 定义一个迭代器
         * hasNext方法判断是否有该元素
         * next方法 将当前结果返回 并指向下一位
         * */
        Iterator it = list.iterator();
        while (it.hasNext()){
            Integer val = it.next();
            if (val.equals(222)){
                it.remove();
            }
            System.out.println(val);
        }
        System.out.println(list);
    }
}

可以看到输出结构如下图,已经删除了222

list最常用的遍历五种方式以及使用场景_第1张图片

 需要注意的是,方法遍历时仍然会输出222,因为next方法会先将返回值也就是222传给val,之后才调用的remove方法进行删原list,之后输出的是val的值

当然如果不想要输出要删除的元素,最直接的方法就是加上continue方法

 Iterator it = list.iterator();
        while (it.hasNext()){
            Integer val = it.next();
            if (val.equals(222)){
                it.remove();
                continue;
            }
            System.out.println(val);
        }

列表迭代器

这是list格外多出的一种遍历方式

ListIterator it = list.listIterator();
        while (it.hasNext()){
            Integer val = it.next();
            System.out.println(val);
        }

他可以对列表进行添加元素,当然也能够删除

 ListIterator it = list.listIterator();
        while (it.hasNext()){
            Integer val = it.next();
            if(val.equals(111)){
                it.add(444);
            }
            System.out.println(val);
        }

输出结果如下图所示

list最常用的遍历五种方式以及使用场景_第2张图片

 增强for遍历

增强for是在jdk1.5之后出现的,其内部原理就是一个Iterator迭代器

需要注意的是  这种方式只能够遍历list,无法对里面的值就行修改

  for (Integer integer : list) {
            System.out.println(integer);
        }

可以看到我下面这种写法,能不能修改list呢?

for (Integer integer : list) {
            integer = 10086;
            System.out.println(integer);
        }

        System.out.println(list);

如果只是要看遍历的输出结果 这个是肯定会有变化的,因为我们是直接修改了integer的值,输出的结果也是它,但是intege只是作为一个第三者出现,它先等于了list原来的值,也就是说 只是让integer中list的值,并不是让它等于list

可以看到输出结果如下:

list最常用的遍历五种方式以及使用场景_第3张图片

 Lambda表达式

不能够操作list,但是代码简洁,只需要一行就可以完成

 list.forEach(a -> System.out.println(a));

甚至可以缩写成

list.forEach(System.out::println);

lambda表达式简介

Lambda 表达式是 Java 8 引入的一种函数式编程特性,它允许你以一种更简洁的方式表示匿名函数或对象方法的实现。Lambda 表达式的基本语法如下:

(parameters) -> { body }

其中,Lambda 表达式由以下几个部分组成:

  1. 参数列表(parameters):这是 Lambda 表达式接受的输入参数列表。你可以指定零个或多个参数,多个参数用逗号分隔。参数的类型可以明确声明,也可以根据上下文进行推导。

  2. 箭头符号(->):箭头符号分隔参数列表和 Lambda 表达式的主体。

  3. 主体(body):这是 Lambda 表达式的执行逻辑。它可以是一个单独的表达式,或者是一段代码块(用花括号括起来),包含多个语句。

下面是一些使用 Lambda 表达式的示例:

无参数的 Lambda 表达式:

() -> System.out.println("Hello, world!");

有参数的 Lambda 表达式: 

(x, y) -> {
    int sum = x + y;
    System.out.println(sum);
}

有返回值的 Lambda 表达式: 

(x, y) -> x + y

 方法引用:

System.out::println

 普通for遍历

这是利用了list的索引就行遍历的方式,但是需要注意的是set是没有索引的,因此要想遍历set就不能用这种方式

 for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

集合中通用的并且常用的六种方法

1.add

list中元素是可以重复的,因此调用add方法 返回值永远是true set中则是不可以重复的,如果添加相同的元素就会返回false

2.clear

这个是将集合清空的方法

3.remove

返回值也是boolean类型的,删除成功返回true 失败返回false

4.contains

判断元素是否包含

底层是依赖equals方法进行判断是否存在的,如果存的是自定对象,这一定要重写equals(在自定义的javaBean中重写equals就行

5.isEmpty

判断集合是否为空

6.size

找到集合的长度

你可能感兴趣的:(数据结构,list,数据结构,java)