遍历集合中的数据
1.for循环遍历
package com.mujin.b;
import java.util.ArrayList;
import java.util.Collection;
public class Demo1 {
public static void main(String[] args) {
Collection<Integer> list = new ArrayList<>();
list.add(1);
list.add(5);
list.add(8);
//将集合转为数组,然后再for循环遍历
Object[] ob = list.toArray();
for (int i = 0; i <ob.length; i++) {
System.out.println(ob[i]);
}
}
}
2.增强for循环
package com.mujin.b;
import java.util.ArrayList;
import java.util.Collection;
public class Demo1 {
public static void main(String[] args) {
Collection<Integer> list = new ArrayList<>();
list.add(1);
list.add(5);
list.add(8);
//将list集合 进行迭代,每次取一个值然后赋值给 i
//将list集合中的数据挨个的赋值给i
for (Integer i : list) {
System.out.println(i);
}
}
}
3.迭代器
package com.mujin.b;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo1 {
public static void main(String[] args) {
Collection<Integer> list = new ArrayList<>();
list.add(1);
list.add(5);
list.add(8);
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
各遍历方式的适用于什么场合?
1、传统的for循环遍历,基于计数器的:
顺序存储:读取性能比较高。适用于遍历顺序存储集合。
链式存储:时间复杂度太大,不适用于遍历链式存储的集合。
2、迭代器遍历,Iterator:
顺序存储:如果不是太在意时间,推荐选择此方式,毕竟代码更加简洁,也防止了Off-By-One的问题。
链式存储:意义就重大了,平均时间复杂度降为O(n),还是挺诱人的,所以推荐此种遍历方式。
3、foreach循环遍历:
foreach只是让代码更加简洁了,但是他有一些缺点,就是遍历过程中不能操作数据集合(删除等),所以有些场合不使用。而且它本身就是基于Iterator实现的,但是由于类型转换的问题,所以会比直接使用Iterator慢一点,但是还好,时间复杂度都是一样的。所以怎么选择,参考上面两种方式,做一个折中的选择。