java - 惰性列表复制(写入时复制)

标签 java collections

有人知道 List 复制 impl 只在变异时才真正进行复制吗?对于以读取为主的用例,它(编辑:可能)比 new ArrayList<>(oldList) 更有效。 。会像 CopyOnWriteArrayList只是它只会复制元素零次或一次。

示例:

List list = Lists.lazyCopy(oldList);     // no copy
list.get(0);                             // delegate to oldList
list.set(0, null);                       // make a copy, mutate the copy
list.get(0);                             // read from copy
list.set(0, null);                       // mutate the copy, don't copy again

最佳答案

正如您在评论中提到的,您有一个 com.google.common.collect.ImmutableList :为什么不使用简单的 java.util.concurrent.CopyOnWriteArrayList与你的 ImmutableList ?

CopyOnWriteArrayList(Collection<? extends E> c) simply uses the source collection's toArray method创建 CopyOnWriteArrayList 的支持数组。以及toArray的非单例、非空RegularImmutableList的实现也只是one System.arraycopy从它自己的支持数组到一个新数组。因此,只有一个内存大分配用于新的后备数组和 System.arraycopy,无论哪种情况,whosh 都应该相当快。当然,缺点是重复的后备数组会增加内存使用量。

关于java - 惰性列表复制(写入时复制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13349226/

相关文章:

java - 用Java编写一次一次的锁

database - ArangoDB升级丢失数据

java - 将 Scala 条件转换为 Java 谓词

java - 使用流式 api 遍历字段而不是遍历对象

arraylist - 如何找到 ArrayList 的中间元素?

java - 如何按日期对查询结果进行排序(Jpa、Java Collections)

Java 性能 : Search and removal speed on removeAll()

java - 使用单独的映射器、 reducer 和驱动程序类运行 MR 程序

java - Drive Rest API V3 中的可恢复上传

java - 'createVideoThumbnail(String, Int) : Bitmap? ' 已弃用。在 Java 中已弃用