-
迭代器(Iterator)方式遍历;
-
For Each 方式遍历;
-
Lambda 表达式遍历(JDK 1.8+);
-
Streams API 遍历(JDK 1.8+)。
-
使用 Streams API 单线程的方式进行遍历;
-
使用 Streams API 多线程的方式进行遍历。
迭代器
常见的迭代器有两种
Iterator
hasNext():如果迭代器指向位置后面还有元素,则返回 true,否则返回false
next():返回集合中Iterator指向位置后面的元素
remove():删除集合中Iterator指向位置后面的元素
ListIterator(List集合特有)
add(E e): 将指定的元素插入列表,插入位置为迭代器当前位置之前
hasNext():以正向遍历列表时,如果列表迭代器后面还有元素,则返回 true,否则返回false
hasPrevious():如果以逆向遍历列表,列表迭代器前面还有元素,则返回 true,否则返回false
next():返回列表中ListIterator指向位置后面的元素
nextIndex():返回列表中ListIterator所需位置后面元素的索引
previous():返回列表中ListIterator指向位置前面的元素
previousIndex():返回列表中ListIterator所需位置前面元素的索引
remove():从列表中删除next()或previous()返回的最后一个元素
set(E e):从列表中将next()或previous()返回的最后一个元素返回的最后一个元素更改为指定元素e
一.相同点
都是迭代器,Iterator和ListIterator都提供了删除方法。
二.不同点
1.使用范围不同,Iterator可以应用于所有的集合,Set、List和Map和这些集合的子类型。而ListIterator只能用于List及其子类型。
2.ListIterator有add方法,set()方法,可以实现对象的添加,修改,而Iterator不能。
3.ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator不可以。
4.ListIterator可以定位当前索引的位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
import java.util.*;
public class test {
public static void main(String[] args) {
Integer [] integers={1,2,3,4,5,6};
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(integers));
HashMap<String,String> hashMap =new HashMap<>();
Set<Map.Entry<String, String>> entries = hashMap.entrySet();
// 迭代器
ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
Iterator<Map.Entry<String, String>> iterator1 = entries.iterator();
while(iterator1.hasNext()){
System.out.println(iterator1.next().getKey()+" "+iterator1.next().getValue());
}
System.out.println("-----------------");
//for-earch
for(Integer lis:list){
System.out.println(lis);
}
System.out.println("-----------------");
//lambda
list.forEach(System.out::println);
System.out.println("-----------------");
entries.forEach(v->{
System.out.println(v.getKey());
System.out.println(v.getValue());
});
System.out.println("-----------------");
//stream
list.stream().forEach(System.out::println);
entries.stream().forEach(v->{
System.out.println(v.getKey());
System.out.println(v.getValue());
});
System.out.println("-----------------");
list.parallelStream().forEach(System.out::println);
}
}