Java 从集合中移除会导致 IllegalStateException

Java Remove from set causes IllegalStateException

例如,我正在尝试删除程序提供给我的第二个元素。

但它会导致 IllegalStateException。

我做错了什么?

HashSet<String> list = new HashSet<>();
list.add("123");
list.add("qwe");
list.add("asd");
int count = 0;
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
  if (count == 1) {
    iterator.remove();
  }
  count++;
}

如果不先调用 iterator.next(),就无法调用 iterator.remove()。除此之外,如果不使用 iterator.next() 推进迭代器,您的循环就是一个无限循环。

for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
  String str = iterator.next();
  if (count == 1) {
    iterator.remove();
  }
  count++;
}

如果您使用的是 Java 8+,这里是另一种从 HashSet 中删除而不使用 Iterator 的方法,您可以使用 removeIf 和 [=14] =] 像这样:

AtomicInteger count = new AtomicInteger(0);
int indexToRemove = 1;
list.removeIf(i -> count.getAndIncrement() == indexToRemove);

如果 indexToRemove 等于 1 结果是:[123, qwe]