【问题标题】:Casting iterator to Integer - ConcurrentModificationException将迭代器转换为整数 - ConcurrentModificationException
【发布时间】:2018-09-28 11:36:34
【问题描述】:

我正在尝试使用递归和迭代来查找列表中的第二大元素:

static List<Integer> list = new ArrayList<Integer>();
static Iterator<Integer> it = list.iterator();

public static int secondBiggest(List<Integer> a) {
    if(it.hasNext()) {
        Integer cur = it.next();

        if (cur > biggest) {
            secondBiggest = biggest;
            biggest = cur;
        } else if (cur < biggest && cur > secondBiggest) {
            secondBiggest = cur;
        }
        secondBiggest(a);
    }
    return secondBiggest;
}

我得到的是一个

并发修改异常 在 java.base/java.util.ArrayList$Itr.checkForComodification(未知来源) 在 java.base/java.util.ArrayList$Itr.next(Unknown Source)

在前面提到的代码的第 6 行

【问题讨论】:

  • 你使用的是哪个 List 实现?
  • @PrashantShilimkar java.util.ArrayList
  • 添加更多上下文:it 来自哪里?
  • 是的,抱歉,我添加了它
  • 你在哪里调用 secondBiggest()?

标签: java list iterator integer


【解决方案1】:

递归的出口不对,走不到底: if(it.hasNext())

如果你真的想通过递归来实现,可以使用下面的例子:

public void test() {
    List<Integer> integers = Arrays.asList(1, 4, 1234, 5, 6, 77);
    int secondBiggest = second(integers, -1, 0, 0);
    System.out.println(secondBiggest);
}


public Integer second(List<Integer> a, Integer biggest, Integer secondBiggest, Integer length) {
    if (a.size() > length) {
        Integer cur = a.get(length);
        length++;
        if (cur > biggest) {
            secondBiggest = biggest;
            biggest = cur;
        } else if (cur < biggest && cur > secondBiggest) {
            secondBiggest = cur;
        }
        secondBiggest = second(a, biggest, secondBiggest, length);
    }
    return secondBiggest;
}

【讨论】:

    猜你喜欢
    • 2021-08-26
    • 2017-11-11
    • 1970-01-01
    • 2019-06-20
    • 2011-09-02
    • 2020-05-18
    • 1970-01-01
    • 2016-12-14
    • 2010-10-19
    相关资源
    最近更新 更多