Machine-translated by Google. Questions are authored in English.
Top

Discussion

What will be the output of the program?

import java.util.*;

public class Item12
{
    public static void main(String[] args)
    {
        List<String> l = new ArrayList<String>(
            Arrays.asList("a", "b", "c"));
        Iterator<String> it = l.iterator();
        while (it.hasNext())
        {
            if (it.next().equals("b")) it.remove();
        }
        System.out.println(l);
    }
}

  • A.The program prints [a, b, c]
  • B.The program prints [b]
  • C.A ConcurrentModificationException is thrown.
  • D.The program prints [a, c]

Answer: D

Correct answer: The program prints [a, c]

Removing through the iterator is the supported way to delete during iteration: the iterator updates its own expected modification count, so no ConcurrentModificationException arises and the traversal continues correctly. The result is the list without "b". Calling l.remove("b") inside the loop instead would have thrown on the next call to next.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.