问题标签 [copyonwritearraylist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ArrayList(完全深拷贝)
在输入问题之前,我知道除了原始类型之外,所有内容都由其参考号存储。我的 java 代码结构是这样的.....首先我有司机、预订和汽车类。它们之间的关系是司机是执行预订的司机,并且汽车被预订到存储在预订类中。
司机将负责预订。汽车有一些原始类型信息。多辆车可以存储到预订中(原始和ArrayList
)。但是一个驱动程序(ArrayList
)(来自驱动程序类)可以有多个保留。因此,当我允许用户查看驱动程序在他的保留中的内容时,我想深度复制其中的所有内容,ArrayList
因为除了原始类型之外的所有内容都是参考编号。
无论如何,我会复制一份数组列表,以便在驱动程序类中保留。
在我的驱动程序类中,这是一个访问器,当它ArrayList
传递ArrayList
.
这是在做深拷贝吗?如果我需要使用clone()
.
我将如何改进?(clone
做浅拷贝,我认为clone
对深拷贝没有帮助,否则我可能会误解其他帖子)。
arraylist - Java 应用程序抛出 ConcurrentModificationException
这是我的代码:
此代码将抛出 ConcurrentModificationException,我曾尝试使用 CopyOnWriteArrayList,但我发现它。next() 返回上次删除的值!我该如何解决?
java - 对 CopyOnArrayList 执行排序操作会导致 java.lang.UnsupportedOperationException
为了避免并发线程修改异常,当我尝试使用帮助 Collection 的类排序方法对该列表进行排序时,我使用了 CopyOnArrayList 及后来导致以下异常:-
线程“主”java.lang.UnsupportedOperationException 中的异常
结果,我尝试阅读可用于CopyOnArrayList的 javadoc
它说
不支持迭代器本身的元素更改操作(删除、设置和添加)。这些方法抛出 UnsupportedOperationException。
但据我所知,任何意义上的排序都需要将元素添加和删除到临时列表中。但是为什么要避免这样做。它适用于对象克隆,因此此因素会以任何方式影响。
测试代码:
输出:运行:输入名称 a 输入年龄 12 输入名称 b 输入年龄 10 输入名称 c 输入年龄 05 输入名称 d 输入年龄 100 输入名称 e 输入年龄 01 线程“main”中的异常 java.lang.UnsupportedOperationException 在 java.util。 concurrent.CopyOnWriteArrayList$COWIterator.set(CopyOnWriteArrayList.java:1049) at java.util.Collections.sort(Collections.java:221) at test.Main.main(Main.java:23) Java 结果:1 BUILD SUCCESSFUL(总计时间:30秒)
这个概念对我来说一直很模糊。任何详细的解释都将是非常可观的。
java - 如何以原子方式替换非同步并发列表或数组
我List
通过多个线程多次读取(迭代)但很少更新(读取次数超过 50,000 倍)。编辑:事实上,在这种情况下,一个数组就足够了,而不是一个列表。
当列表更新时,它只是用不同的版本替换(没有add()
或remove()
调用)。
CopyOnWriteArrayList避免了同步列表的缺点,但我不确定将列表设置为新值是原子的。我也读过这个问题。
显示一些代码。将以下内容视为单例 Spring bean 的属性。
我是否需要使用ReadWriteLock来实现线程安全集?
java - ArrayList vs HashMap——大量的迭代和对象操作
基本上,我有大量对象的一些数据结构,这个结构将被多个线程访问,并且需要考虑到这一点。
需要不断地执行大量迭代和对象操作(每次主循环迭代都可能导致数据结构中的每个对象在最坏的情况下都被修改,在最佳/正常情况下没有任何修改)。
目前,我使用 aCopyOnWriteArrayList
作为我的结构。此外,在每次迭代中,我确保不添加重复项,以尽量减少列表的大小。
使用锁/同步并不理想,因为我想避免阻止这些操作的线程。
据我所知,我的选择如下:
contains()
对要添加的每个元素运行检查- 从列表中创建一个
HashSet
并将其转换回来(基本上删除所有重复项) - 使用 a
ConcurrentHashMap
而不是列表作为数据结构 - 还有什么?
我知道ArrayLists
使用迭代要好得多,而严格使用HashMap
. 由于我的情况需要两者,我想知道这里最好的解决方案是什么。
我还应该提到元素的顺序不是问题。
编辑:为了进一步澄清这一点,该集合将不断添加、删除和修改元素。在何种程度上取决于每个特定的运行时间(基于一般随机事件),所以我对做出任何关于它发生频率的假设持谨慎态度。唯一可以保证发生的事情是每次都会完全迭代集合,对每个元素执行多次检查。
java - 为什么 CopyOnWriteArrayList 与迭代 unmodifiableList 不同?
我无法理解为什么我们不能通过迭代一个不可变列表而不是使用这个新实现来实现?
java - copyonwritearraylist 奇怪的错误
我有这个代码:
我有这个错误:
线程“GeneralSTPool-8”中的异常 java.lang.ArrayIndexOutOfBoundsException: 2 at java.util.concurrent.CopyOnWriteArrayList.get(Unknown Source) at java.util.concurrent.CopyOnWriteArrayList.get(Unknown Source) at net.sf.l2j。 gameserver.model.RandomFight.pickPlayers(RandomFight.java:89) 在 net.sf.l2j.gameserver.model.RandomFight$pickPlayers.run(RandomFight.java:270) 在 net.sf.l2j.gameserver.ThreadPoolManager$RunnableWrapper。 run(ThreadPoolManager.java:85) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask 的 $201(未知来源)。在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) run(Unknown Source)
这里发生了什么?第 89 行是这样的:for(L2PcInstance player : players)
。这不应该出现,因为rnd.get()
is from 0
to players.size() - 1
。
java - CopyOnWriteArrayList 大小变化
当所有访问相同 CopyOnWriteArrayList 的每个方法 render、update 和 majorUpdate 都运行时,渲染工作正常,但 update 和 majorUpdate 打印 CopyOnWriteArrayList 的长度为 0。这是代码:
mule - 设置变量会话 copyonwritearraylist
我是 Mule ESB 的新手,我遇到了下一个问题。我使用连接器“Collection Splitter”将订单(书籍)列表与其他事物分开。当我进行检查时,我会返回以连接器“Collection Agreggator”加入订单中的书籍。我想要的是在那一刻将有效负载的信息保存在会话变量中。系统不这样做。我认为这是可能的,因为保存在有效负载上的类型是“CopyOnWriteArrayList”类型,我现在不可以将这种类型的列表保存在会话变量中。
有人可以帮助我吗?谢谢!
java - 如何对 CopyOnWriteArrayList 进行排序
我要排序CopyOnWriteArrayList
。但是当我尝试运行以下代码时
它在投掷unsorted operation exception
。
提前致谢。