文章目录
一、总述二、代码实现1)迭代器遍历2)增强for遍历3)Lambda表达式遍历4)普通for循环5)列表迭代器遍历 三、五种遍历方式对比
一、总述
在正式学习之前,我们先来回忆一下刚刚说过的话: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索引
它里面有几个方法需要我们掌握。
1、add(E e)
:它可以在迭代的过程中添加元素,而且是利用迭代器里面的方法进行添加。
2、hasNext()
:跟原来是一样的。
3、next()
:跟原来也是一样的。
4、remove()
:跟原来也是一样的,利用迭代器删除元素。
剩下的两个方法不用记,了解一下即可。
有两个好玩的方法:hasPrevious()
,previous()
,这两个方法跟 next()
是反过来的,next()
是从前往后去移动迭代器里面的指针;previous()
是从后往前反过来进行移动。
迭代器创建出来指针默认是指向 0索引
的,那假如你现在直接调用 previous()
它是会报错的,因为它前面已经没有元素让你去移动了。
hasPrevious()
,previous()
只有先将迭代器往后移动,它才可以往前移动。它没有办法创建迭代器的时候直接让指针指向最后一个,然后再一个一个倒着遍历,虽然也可以这么做,但是不常见。
这两个同样也了解一下即可,因为在以后基本上用不到它。
这个迭代器额外添加了一个方法:在遍历的过程中,可以添加元素。
要注意,在添加的时候不能使用集合的方法 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遍历。