几种遍历对比

1.for循环

2.for-each循环 jdk1.5提供的

3.foreach,jdk1.8提供,是Iterable接口中的默认实现方法(原理是应用了for-each来实现遍历,只是增加了lambda表达式)

4.Iterator

5.stream

1) 实际上2,3,4三种方式都是医用迭代器, 原理是相同的

2) 遍历包括一个线程遍历另一个线程修改的安全问题, 见点击打开链接 , 和在一个线程遍历的过程中在自身遍历时进行修改

3) 对于集合的修改包括增删,(改?), 而在遍历过程中对集合中元素进行修改时允许的(使用 foreach 时,是不能修改正在遍历的集合 —— 至于集合中的元素,想怎么改怎么改,修改元素并不会影响到集合的状态,因为集合中保存的是元素的引用)

4) list.stream().foreach() 和 list.foreach() 是不同实现原理

5) lambda表达式代表的是匿名内部类, 常用的接口有predicate, function, consumer

6) stream和iterator的区别, 前者可以并行执行,后者只能串行

7) stream不会修改数据源, 中间操作不会修改数据源, 但是最终操作有可能修改数据源, 如 list.stream().foreach()操作  不是说stream的数据源不能被修改吗?

8) removeif方法是根据iterator中的remove方法删除的, removeif和foreach只是用到了lambda表达式, 和stream无关

arraylist的遍历适合使用for循环,因为其实数组,随机查找速度最快

linkedlist的比遍历适合使用iterator遍历,因为其是双向链表

posted @ 2017-02-22 17:53  車輪の唄  阅读(14)  评论(0编辑  收藏  举报  来源