我在Java中搜索集合并遇到了一些迭代器示例。我给出了以下代码
public class iteratorexample {
public static void main(String[] args) {
String removeE="New York";
List<String> thelist = new ArrayList<String>();
thelist.add("Dallas");
thelist.add("Richmond");
thelist.add("Atlanta");
thelist.add("New York");
thelist.add("Birmingham");
System.out.print(thelist);
System.out.println();
Iterator<String> itr= thelist.iterator();
/*while(itr.hasNext()){
System.out.print(" " +itr.next()+" ");
} */
**while(itr.hasNext()){
String remo=(String)itr.next();
if(remo.equals(removeE)){
itr.remove();
}
}**
System.out.println();
System.out.println("After removing: ");
System.out.println(thelist);
}
}
Above Code give output
[Dallas, Richmond, Atlanta, New York, Birmingham]
After removing:
[Dallas, Richmond, Atlanta, Birmingham]
为什么?
如果我同时使用while循环,迭代器不会从列表中删除元素,为什么?你能帮我吗。
public static void main(String[] args) {
String removeE="New York";
List<String> thelist = new ArrayList<String>();
thelist.add("Dallas");
thelist.add("Richmond");
thelist.add("Atlanta");
thelist.add("New York");
thelist.add("Birmingham");
System.out.print(thelist);
System.out.println();
Iterator<String> itr= thelist.iterator();
while(itr.hasNext()){
System.out.print(" " +itr.next()+" ");
}
while(itr.hasNext()){
String remo=(String)itr.next();
if(remo.equals(removeE)){
itr.remove();
}
}
System.out.println();
System.out.println("After removing: ");
System.out.println(thelist);
}
}
上面的代码给出了输出
[Dallas, Richmond, Atlanta, New York, Birmingham]
Dallas Richmond Atlanta New York Birmingham
After removing:
[Dallas, Richmond, Atlanta, New York, Birmingham]
答案 0 :(得分:4)
如果我同时使用while循环,迭代器不会从列表中删除元素,为什么?
因为第一个循环完成后,迭代器的hasNext
为false。所以代码永远不会进入第二个循环。
要第二次循环,你必须得到一个新的迭代器。
在支持它的集合中,您可以使用迭代器的remove
方法在一个循环中打印和删除。
while(itr.hasNext()){
String remo=(String)itr.next();
System.out.print(" " +remo+" ");
if(remo.equals(removeE)){
itr.remove();
}
}
答案 1 :(得分:0)
你在做:
while(itr.hasNext()){
System.out.print(" " +itr.next()+" ");
}
while(itr.hasNext()){
所以在第一次循环之后你的迭代器就会完成。