Java中使用addAll方法,抛出ConcurrentModificationException,请问问题出在哪儿?怎么解决?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中使用addAll方法,抛出ConcurrentModificationException,请问问题出在哪儿?怎么解决?相关的知识,希望对你有一定的参考价值。
Java新手,程序目的:将list中部分元素替换为指定的字符串str,我是将list截断为三个新的list即al1,al2,al3,将其中需要修改的al2部分使用Collections.fll方法替换为新的str,但是在将三个新的list添加回list时运行出错(编译通过),求大神看看。同时也希望指出,list的addAll方法使用时有哪些要注意的地方?
import java.util.*;
class CollectionsDemo
public static void main(String[] args)
List<String> list = new ArrayList<String>();
list.add("asafxx");
list.add("abcdsd");
list.add("dfx");
list.add("x");
list.add("ss");
list.add("x");
sop(list);
fillDemo(list,1,3,"pp");
public static void fillDemo(List<String> list,int start,int end,String str)
List<String> al1 = list.subList(0,start);
List<String> al2 = list.subList(start,end);
List<String> al3 = list.subList(end,list.size());
Collections.fill(al2,str);
list.clear();
list.addAll(al1);
list.addAll(al2);
list.addAll(al3);
sop(list);
public static void sop(Object obj)
System.out.println(obj);
上面clear去掉,list重定向个对象,即可 list = new ArrayList<String>();
// new 生成的对象放在堆中,当list重定向之后,之前的那个对象依然存在,除非等到程序走完,gc会去清空堆中空间.故程序可运行.不知道这样的解释能不能看懂!
望知悉~追问
感谢!问题确实解决了,clear后的list只能添加不是由原list派生出来的元素及list吗?
参考技术A subList方法返回的List和原来的List共享数据Returns a view of the portion of this list between the specified
fromIndex, inclusive, and toIndex, exclusive.追问
不好意思,可以说得稍微详细点儿吗?Java新手,见谅。
另外程序中该怎么解决呢?
Java的PriorityQueue构造函数调用和addAll方法的区别
【中文标题】Java的PriorityQueue构造函数调用和addAll方法的区别【英文标题】:Difference between Java's PriorityQueue constructor call and addAll method 【发布时间】:2019-05-18 18:28:13 【问题描述】:我正在解决 leetcode 上的一个问题,有人告诉我,使用集合实例化 PriorityQueue 需要 O(n) 时间,而 addAll 方法需要 O(nlogn) 时间。它是否正确? 我找不到任何证据。
https://www.techiedelight.com/find-kth-largest-element-array/这个网站3号的做法是用addAll(List)来创建一个PriorityQueue真的是O(n)吗?
【问题讨论】:
我从未使用过优先级队列。你能描述一下它的算法吗? 【参考方案1】:PriorityQueue 在 java 中从 AbstractQueue 获取 addAll 方法。 documentation 表示 addAll 方法只是遍历提供的集合。所以我会说 addAll 需要 O(n) 时间。如果您不相信,请查看the source code。
【讨论】:
以上是关于Java中使用addAll方法,抛出ConcurrentModificationException,请问问题出在哪儿?怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章
如果元素是重复的,为什么Set.of()会抛出IllegalArgumentException?
Java的PriorityQueue构造函数调用和addAll方法的区别