1、迭代器
Java中有的多的集合,他们的底层数据结构是不同的,因此在集合遍历的时候采取的方式也各不相同,迭代器抽取出了集合的共有功能,出现了Iterator接口。在遍历集合的时候不用在意集合的具体内部结构。
迭代器方法:
2、迭代方式
(1)创建Person类:
public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { if (age >= 0 || age <= 200) this.age = age; } public Person(String name, int age) { this.name = name; this.age = age; } }
(2)创建IteratorDemo类,包含遍历集合的三种方法:
import java.util.ArrayList; import java.util.Iterator; public class IteratorDemo { public void addPerson(ArrayList<Person> array) { Person p1 = new Person("张三", 12); Person p2 = new Person("李明", 14); Person p3 = new Person("李华", 23); Person p4 = new Person("吴佩佩", 2); Person p5 = new Person("王涛", 15); array.add(p1); array.add(p2); array.add(p3); array.add(p4); array.add(p5); } // 运用一般的方法遍历集合 public void printPerson(ArrayList<Person> array) { System.out.println("运用一般的方法遍历集合:"); for (int i = 0; i < array.size(); i++) { Person p = array.get(i); System.out.println(p.getName() + " " + p.getAge()); } } // 运用迭代器方法遍历集合 public void iteratorPrint(ArrayList<Person> array) { System.out.println("迭代器方法遍历集合:"); Iterator<Person> listIt = array.iterator();//获取集合的实现类对象,病调用集合的iterator() while (listIt.hasNext()) { Person per = listIt.next(); System.out.println(per.getName() + " " + per.getAge()); } } // 运用增强for对集合遍历 public void forPrint(ArrayList<Person> array) { System.out.println("增强for对集合进行遍历:"); for (Person per : array) {//for(数据类型 变量名:数组或集合) System.out.println(per.getName() + " " + per.getAge()); } } }
import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayList<Person> array = new ArrayList<Person>();// 调用添加方法 IteratorDemo it = new IteratorDemo(); it.addPerson(array);// 调用遍历集合 it.printPerson(array); it.iteratorPrint(array); it.forPrint(array); } }
运行结果:
在遍历同一集合时,虽然采取了不同的方法,但是结果是相同的。
(3)三种遍历方法的特点:
普通方法:不同的集合需要不同的方法去实现,不能实现底层结构与遍历的分离。
Iterator迭代器:
- 能实现底层结构与遍历的分离,适合于遍历链式结构。在迭代器迭代的过程中,禁止对集合进行更改,因为迭代器在迭代之前已经被创建出来了。
- 能够调用迭代器的remove方法进行删除操作,不能进行增改操作
增强for:
- 能够节省代码量。但是增强for也有弊端,就是不能对容器中的元素进行操作,因为他没有索引。对于数组底层用的是普通的for循环,对于集合用的是Iterator迭代器,适合顺序结构。
- 不能进行增删改操作
普通for:
- 可以进行增删改查操作,但是只有list接口的实现类可以采用这种遍历方式,因为他们有索引