1.迭代器遍历
迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式。
迭代器遍历不依赖索引。
获取迭代器对象
方法名 | 说明 |
Iterator<E> iterator() | 返回迭代器对象,默认指向当前集合的0索引 |
Iterator中的常用方法
方法名 | 说明 |
boolean hasNext() | 判断指针当前指向位置是否有元素,有元素返回true,没有返回false |
E next() | 获取当前位置的元素,并将迭代器对象移向下一个位置 |
Iterator<String> it = list.iterator(); //创建指针
while(it.hasNext()){ //判断指针指向位置是否有元素
String str = it.next(); //获取指针指向位置的元素并移动指针
System.out.println(str);
}
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo2 {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
//创建迭代器的对象,相当于一个指针,默认指向0索引
Iterator<String> it = coll.iterator();
//利用循环不断去获取集合中每一个元素
while (it.hasNext()){
//next方法要做两件事:获取元素、移动指针
String s = it.next();
System.out.println(s);
}
}
}
迭代器的四个细节:
- 如果当前位置没有元素,还要强行获取,会报NoSuchElementException异常
- 迭代器遍历完毕,指针不会复位
- 循环中只能用一次next方法
- 迭代器遍历时,不能用集合的方法进行增加或者删除操作
2.增强for遍历
- 增强for的底层就是迭代器,为了简化迭代器的代码书写的
- 它是JDK5之后出现的,其内部原理就是一个Iterator迭代器
- 所有的单列集合和数组才能用增强for遍历
//格式
for(元素的数据类型 变量名 : 数组或者集合){
}
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo3 {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
//增强for遍历 快捷键:集合名字.for(coll.for)
//s实际就是一个第三方变量,在循环过程中依次表示集合的每一个元素
for (String s : coll) {
System.out.println(s);
}
}
}
3.Lambda表达式遍历
JDK8提出的一种更简单、更直接的集合遍历方式
方法名 | 说明 |
default void forEach(Consumer<? super T> action) | 结合lambda遍历集合 |
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo4 {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
//lambda表达式遍历
/*coll.forEach(new Consumer<String>() {
@Override
//s依次表示集合中的每一个元素
public void accept(String s) {
System.out.println(s);
}
});*/
coll.forEach(s-> System.out.println(s));
}
}