如何同时打印和删除迭代器中的元素?

时间:2013-07-26 15:02:27

标签: java iterator while-loop

我在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]   

2 个答案:

答案 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()){

所以在第一次循环之后你的迭代器就会完成。