【问题标题】: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 的方法,您可以将 removeIfAtomicInteger 一起使用,如下所示:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 2022-07-01
      • 2017-03-15
      • 2012-09-20
      相关资源
      最近更新 更多