https://www.jianshu.com/p/7b80de799d3a
for each 以用来处理集合中的每个元素而不用考虑集合定下标。就是为了让用 Iterator 简单。但是删除的时候,区别就是在 remove,循环中调用集合remove会导致原集合变化导致错误,而应该用迭代器的 remove 方法。
for 循环和迭代器 Iterator对比:
①采用 ArrayList 对随机访问比较快,而for循环中的get(),采用的即是随机访问的方法,因此在 ArrayList 里,for循环较快
②采用 LinkedList 则是顺序访问比较快,Iterator 中的 next(),采用的即是顺序访问的方法,因此在 LinkedList 里,使用 Iterator 较快。
③从数据结构角度分析,for循环适合访问顺序结构,可以根据下标快速获取指定元素。而 Iterator 适合访问链式结构,因为迭代器是通过next()和Pre()来定位的,可以访问没有顺序的集合。
④使用 Iterator 的好处在于可以用相同方式去遍历集合中元素,而无需考虑集合类的内部实现(只要它实现了 java.lang.Iterable 接口)。如果使用 Iterator 来遍历集合中元素,一旦不再使用 List 转而使用 Set 来组织数据,那遍历元素的代码不用做任何修改;如果使用 for 来遍历,那所有遍历此集合的算法都得做相应调整。因为List有序,Set无序,结构不同,它们的访问算法也不一样。(由此也说明遍历和集合本身分离了)
作者:日常更新
链接:https://www.jianshu.com/p/7b80de799d3a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。