gpt4 book ai didi

Java List和递归导致并发修改异常

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:41:46 24 4
gpt4 key购买 nike

下面的函数递归地遍历一个列表并将它总是除以一半并对子列表做一些事情。当 listsize 为 2 时,递归中断。我知道如果我在迭代列表时更改列表,则会发生并发修改异常。但我不使用迭代,它仍然会发生:

    private static List<ParticipantSlot> divide(List<ParticipantSlot> list) {
int n = list.size();

//do something

if (n>2){
List<ParticipantSlot> l = divide(list.subList(0, n/2-1));
List<ParticipantSlot> r= divide(list.subList(n/2, n));

l.addAll(r);
return l;
}else{
return list;
}
}

最佳答案

您正在使用 addAll(),它将遍历您在参数中提供的集合。现在 subList 只返回一个 view 到原始列表,所以你试图将值添加到原始列表的 View ,并迭代原始列表的不同部分同时列出。砰。

如果您每次都创建子列表的副本,它应该可以工作 - 尽管效率会很低。

关于Java List和递归导致并发修改异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8744714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com