【Java】List集合的遍历方式

一、总述

在正式学习之前,我们先来回忆一下刚刚说过的话:List继承于Collection,因此在Collection中所有的方法在List里面都是可以使用的。

我们在Collection中讲解了三种遍历方式,这三种遍历方式在List集合中也是可以使用的,但是在这些的基础上,它还有自己单独的方式。

List集合一共有五种遍历方式。

  • 迭代器遍历
  • 列表迭代器遍历
  • 增强for遍历
  • Lambda表达式遍历
  • 普通for循环(因为List集合存在索引)

二、代码实现

List本身也是一个接口,因此我们还是需要利用这种多态的方式来创建对象。

//创建集合并添加元素
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");

1)迭代器遍历

Iterator<String> it = list.iterator();
while(it.hasNext()){
    String str = it.next();
    System.out.println(str);
}

2)增强for遍历

下面的变量s,其实就是一个第三方的变量而已。在循环的过程中,依次表示集合中的每一个元素

for (String s : list) {
    System.out.println(s);
}

3)Lambda表达式遍历

forEach方法的底层其实就是一个循环遍历,依次得到集合中的每一个元素,并把每一个元素传递给下面的accept方法
accept方法的形参s,依次表示集合中的每一个元素。

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

Lambda表达式

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

4)普通for循环

size方法跟get方法还有循环结合的方式,利用索引获取到集合中的每一个元素

for (int i = 0; i < list.size(); i++) {
    //i:依次表示集合中的每一个索引
    String s = list.get(i);
    System.out.println(s);
}

5)列表迭代器遍历

列表迭代器在Java中的名字叫做 ListIterator,它同样也是一个接口,打开帮助文档,来看一下这个接口的用法。

可以看见,ListIterator 是继承 Iterator 的,因此列表迭代器其实是我们之前学习的迭代器的子接口。

里面的指针也是默认指向 0索引

image-20240426073033949

它里面有几个方法需要我们掌握。

1、add(E e) :它可以在迭代的过程中添加元素,而且是利用迭代器里面的方法进行添加。

2、hasNext() :跟原来是一样的。

3、next():跟原来也是一样的。

4、remove() :跟原来也是一样的,利用迭代器删除元素。

剩下的两个方法不用记,了解一下即可。

image-20240426073328469

有两个好玩的方法:hasPrevious()previous(),这两个方法跟 next() 是反过来的,next() 是从前往后去移动迭代器里面的指针;previous() 是从后往前反过来进行移动。

迭代器创建出来指针默认是指向 0索引 的,那假如你现在直接调用 previous() 它是会报错的,因为它前面已经没有元素让你去移动了。

hasPrevious()previous() 只有先将迭代器往后移动,它才可以往前移动。它没有办法创建迭代器的时候直接让指针指向最后一个,然后再一个一个倒着遍历,虽然也可以这么做,但是不常见。

这两个同样也了解一下即可,因为在以后基本上用不到它。

image-20240426074313893

这个迭代器额外添加了一个方法:在遍历的过程中,可以添加元素。

要注意,在添加的时候不能使用集合的方法 add() 添加,因为在用迭代器遍历集合的过程中,不能使用集合的方法 删除 / 添加。

ListIterator<String> it = list.listIterator();
while(it.hasNext()){
    String str = it.next();
    if("bbb".equals(str)){
        //qqq
        it.add("qqq");
    }
}
System.out.println(list);

三、五种遍历方式对比

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

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

列表迭代器List集合 系列中独有的,Set集合 是用不了的,Set集合 只能使用上面迭代器的方式进行遍历。

增强for遍历Lambda表达式:仅仅想遍历获取集合里面的每一个元素,此时使用增强for遍历Lambda表达式,因为这两种方式代码最简单。

普通for:如果遍历的时候想操作索引,那么可以用普通for遍历。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值