学完ListIterator,就产生了有没有可能发生死循环的可能,我开始试验。这是我认为会死循环的代码- package com.itheima;
- import java.util.*;
- public class ListIteratorDemo {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- ArrayList<String> al=new ArrayList<String>();
- al.add("lisi01");
- al.add("lisi02");
- al.add("lisi03");
- al.add("lisi04");
- list(al);
- }
- public static void list(ArrayList<String> al){
- sop(al);
- for(ListIterator<String> lt=al.listIterator(0);lt.hasNext();){
- String obj=lt.next();
- sop(obj); //在这里加上输出语句,如果添加的新元素会出现在这里,一定会是死循环
- if(obj=="lisi02")
- lt.add("lisi02");
- }
- sop(al);
- }
- public static void sop(Object o)
- {
- System.out.println(o);
- }
- }
复制代码 输出结果是
发现添加新元素后,果然迭加器会跳过该元素,这样就消除了我的顾虑,
但是我还不放心,又改了,核心代码
- for(ListIterator<String> lt=al.listIterator(al.size());lt.hasPrevious();){
- String obj=lt.previous();
- sop(obj); //在这里加上输出语句,如果添加的新元素会出现在这里,一定会是死循环
- if(obj=="lisi02")
- lt.add("lisi02");
- }
复制代码 结果奇迹发生了
把检索方式反一下,照理应该和next()是一样的处理方式,结果真出现死循环了。
我想求解:这是jdk编写者的遗漏还是另有原因。
|
|