【问题标题】:Java Remove from set causes IllegalStateExceptionJava 从集合中移除导致 IllegalStateException
【发布时间】:2018-04-29 21:55:40
【问题描述】:
例如,我正在尝试删除程序给我的第二个元素。
但它会导致 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++;
}
【问题讨论】:
标签:
java
set
illegalstateexception
【解决方案1】:
如果不先调用iterator.next(),则不能调用iterator.remove()。除此之外,如果不使用iterator.next() 推进迭代器,您的循环就是一个无限循环。
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
String str = iterator.next();
if (count == 1) {
iterator.remove();
}
count++;
}
【解决方案2】:
如果您使用的是 Java 8+,这是另一种从 HashSet 中删除而没有 Iterator 的方法,您可以将 removeIf 与 AtomicInteger 一起使用,如下所示:
AtomicInteger count = new AtomicInteger(0);
int indexToRemove = 1;
list.removeIf(i -> count.getAndIncrement() == indexToRemove);
如果indexToRemove 等于 1,则结果为:[123, qwe]