集合模块之遍历List集合
三种方式遍历List集合
方式一:使用基本的for循环遍历List集合
/*
* 使用三种不同的循环遍历List<Student>
* 1.传统的for循环
* 2,迭代器Iterator
* 3,增强for循环 底层基于迭代器迭代器Iterator
* */
List<Student> students = new ArrayList<>();
students.add(new Student("ll",22));
students.add(new Student("ll2",221));
students.add(new Student("ll3",222));
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("llllll");
System.out.println("自己测试");
for(Student a :students){
arrayList.set(0,a.getName());
System.out.println(arrayList);
}
//方式一:遍历集合
System.out.println("用最原始的for循环循环集合");
for(int i=0;i<students.size();i++){
Student student=students.get(i);
System.out.println(student.getName()+","+student.getAge());
}
优缺点分析:
优点:效率最高,遍历快,可以根据自定计数器操作元素
缺点:不适用所有集合,试用范围小
使用场合:
顺序存储:读取性能比较高,适用于遍历顺序存储集合。
链式集合:时间复杂度太大,不适用于遍历链式存储的集合
方式二:迭代器对遍历List集合
Iterator是Java集合框架的成员,主要用于遍历(即迭代访问)Collection集合中的元素,也成为迭代器。
提供三种方法:
boolean hasNext():返回集合里的下一个元素
Object next():返回集合里下一个元素。
void remove():删除集合里上一次next方法返回的元素
//方式二:迭代器
System.out.println("迭代器遍历");
Iterator<Student> iterator =students.iterator();
while (iterator.hasNext()){
Student student=iterator.next();
System.out.println(student.getName()+","+student.getAge());
}
优缺点分析:
优点:迭代器提供了操作元素的方法,可以在遍历中相应地操作元素。
缺点:运行复杂,性能稍差,效率下个对其他两种遍历方式较低。
使用场合:
顺序存储:如果不是太在意时间,推荐选择此方式,毕竟代码更加简洁,也防止了Off-By-One的问题
链式存储:意义就重大了,平均时间复杂度降为O(n),还是挺诱人的,所以推荐此种遍历方式。
方式三:增强for循环遍历List集合
//方式三:增强for循环进行遍历集合
System.out.println("for each增强循环遍历");
for(Student stu:students){
System.out.println(stu.getName()+","+stu.getAge());
}
优缺点分析:
优点:代码简洁,不易出错。
缺点:只能做简单的遍历,不能在遍历过程中操作(删除,替换)数据集合。
使用场合:
foreach只是让代码更加简洁了,但是他有一些缺点,就是遍历过程中不能操作数据集合(删除等),所以有些场合不使用。而且它本身就是基于lterator实现的但是由于类型转换的问题,所以会比直接使用lterator慢一点,但是还好,时间复杂度都是一样的。所以怎么选择,参考上面两种方式,做一个折中的选择。