Java迭代器hasNext()方法始终为false

时间:2014-03-05 18:14:17

标签: java iterator set

我们有一个HashSet对象:

private Set<Client> clients = new HashSet<Client>();

它的迭代器:

private Iterator<Client> iterator = clients.iterator();

让我们将对象添加到该集合并打印出迭代器hasNext方法输出:

Client client = new Client(name);

clients.add(client);

System.out.println(iterator.hasNext());

输出为:“false”。为什么呢?

3 个答案:

答案 0 :(得分:3)

迭代器一旦创建就永远不会改变 - 它只适用于你获得它时集合中的元素。它无法识别之后创建它,您添加了一个元素。只需在添加完所有元素后重新获取迭代器。

答案 1 :(得分:2)

Iterator类的HashSet是一个快速失败的迭代器。从HashSet类的文档:

  

此类的迭代器方法返回的迭代器是快速失败的:   如果在创建迭代器后的任何时间修改了该集,则   除了通过迭代器自己的删除方法,Iterator之外的任何方式   抛出ConcurrentModificationException。因此,面对   并发修改,迭代器快速干净地失败,   而不是冒着任意的,非确定性的行为冒险   未来不确定的时间。

以下是Iterator internal implementation的详细解释。

答案 2 :(得分:0)

见:

http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html

如果在获取迭代器

后从外部修改集合,则迭代器会中断