- 两种遍历分别指的是java.util.List#replaceAll和java.lang.Iterable#forEach
- 对于replace来说,参数是一个UnaryOperator,遍历集合的时候,会把元素传给UnaryOperator,然后把返回值set到list中,也就是说这种遍历是会改变原来集合的
default void replaceAll(UnaryOperator<E> operator) { Objects.requireNonNull(operator); final ListIterator<E> li = this.listIterator(); while (li.hasNext()) { li.set(operator.apply(li.next())); } }
-
对于forEach来说,实在遍历的时候把元素给到入参Comsumer中,然后就没有然后了,元素的引用可能被改变,但是并没有主动改变元素的意思
default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }
-
个人总结就是根据方法名来说,replaceAll是我要对集合的元素进行批量替换,集合元素(也就是那些引用)是要换掉的,而forEach就是我要对集合里的每个元素做一个操作,但不影响引用,如果不涉及引用都要改的话用forEach,否则用replaceAll