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]
例如,我正在尝试删除程序提供给我的第二个元素。
但它会导致 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]