本帖最后由 刘向阳 于 2012-8-9 08:44 编辑
今天老师讲集合,只是说不能在迭代器中修改集合,但是我就想知道为什么不能修改呢?谁懂给说下,谢了。这个程序是删除年龄为19的人。
public class Exercise2 {
public static void main(String[] args) {
// demo1();
// demo2();
// demo3();
// demo4();
}
private static void demo4() {
List list = new ArrayList();
list.add(new Person("张三", 19));
list.add(new Person("李四", 20));
list.add(new Person("王五", 19));
list.add(new Person("赵六", 19));
for (Object obj : list) {
Person p = (Person) obj;
if (p.getAge() == 19)
list.remove(p); // 增强for循环内部就是使用迭代器, 在使用的过程中不能改变原集合. 由于无法获得迭代器, 所以增强for循环不能操作集合.
}
}
private static void demo3() {
List list = new ArrayList();
list.add(new Person("张三", 19));
list.add(new Person("李四", 20));
list.add(new Person("王五", 19));
list.add(new Person("赵六", 19));
System.out.println(list);
Iterator iter = list.iterator();
while (iter.hasNext()) {
Person p = (Person) iter.next();
if (p.getAge() == 19)
iter.remove(); // 在使用迭代器的时候, 不能修改集合中的结构, 如果要删除, 需要使用迭代器的remove()方法
}
System.out.println(list);
}
private static void demo2() {
List list = new ArrayList();
list.add(new Person("张三", 19));
list.add(new Person("李四", 20));
list.add(new Person("王五", 19));
list.add(new Person("赵六", 19));
System.out.println(list);
for (int i = 0; i < list.size(); i++) {
Person p = (Person) list.get(i);
if (p.getAge() == 19)
list.remove(i--); // 删除元素后, 后面的元素会向前移动, 这时我们将指针也向前移动一位
}
System.out.println(list);
}
private static void demo1() {
List list = new ArrayList();
list.add(new Person("张三", 19));
list.add(new Person("李四", 20));
list.add(new Person("王五", 19));
list.add(new Person("赵六", 19));
for (int i = 0; i < list.size(); i++) {
Person p = (Person) list.get(i);
if (p.getAge() == 19)
System.out.println(p.getName());
}
Iterator iter = list.iterator();
while (iter.hasNext()) {
Person p = (Person) iter.next();
if (p.getAge() == 19)
System.out.println(p.getName());
}
for (Object obj : list) {
Person p = (Person) obj;
if (p.getAge() == 19)
System.out.println(p.getName());
}
}
} |