此文汇总了基本所有List迭代的写法,以及其优缺点。
第一种:基本的for循环(不推荐使用)for (int i = 0; i
E element = list.get(i);
// 1 - 可以调用元素的方法
// 2 - 可以用i来对特殊计数的处理
// 3 - 缺点是如果是LinkedList使用get方法,会增加时间复杂度(O(N))!ArrayList时间复杂度是恒定的(O(1))
}
第二种:使用foreach写法for (E element : list) {
// 1 - 可以调用元素的方法
// 2 - 其底层实现是使用Iterator
// 3 - 缺点是无法对list进行操作
}
第三种:使用Iterator(即foreach的实现)for (Iterator iter = list.iterator(); iter.hasNext(); ) {
E element = iter.next();
// 1 - 可以调用元素的方法
// 2 - 可以使用iter.remove()去删除当前元素
// ...
}
第四种:使用ListIteratorfor (ListIterator iter = list.listIterator(); iter.hasNext(); ) {
E element = iter.next();
// 1 - 可以调用元素的方法
// 2 - 可以使用iter.remove()去删除当前元素
// 3 - 可以使用iter.add(...)去插入一个新元素,索引在当前元素和next的中间
// 4 - 可以使用iter.set(...)来替换当前元素
}
第五种:Stream.maplist.stream().map(e -> e + 1);//可以调用元素的方法
第六种:Iterable.forEach,Stream.forEach,Stream.forEachOrdered, parallelStream.forEachArrays.asList(1,2,3,4).forEach(System.out::println);
// 1 - 可以调用元素的方法
// 2 - 需要引用包含对象才能删除元素
// 3 - 从功能上将迭代与对每个项执行的操作分开。
Arrays.asList(1,2,3,4).stream().forEach(System.out::println);
// 和上面的功能类似,但更大
// 注意:这个方法无法保证顺序
Arrays.asList(1,2,3,4).stream().forEachOrdered(System.out::println);
// 和上面功能类似,但可以保证顺序
// 如果不涉及顺序,而且是一个非常大的接货,还可以使用
Arrays.asList(1,2,3,4).parallelStream().forEach(System.out::println);