【问题标题】:Sharing parts of lists to avoid copying共享部分列表以避免复制
【发布时间】:2016-05-20 00:17:00
【问题描述】:

我正在寻找一种实现 List 的数据结构,它允许我重用出现在多个列表中的部分列表

为了说明这一点,请考虑以下三个列表:

如您所见,红色序列 (42, 88, 76, 60) 和蓝色序列 (21, 9, 47) 被多次使用,每一个代表一个独立的列表,作为其他列表的一部分共享。实际上,列表可能更长。

列表只需只读,因为它将用作返回值。创建列表集合的过程将是唯一(允许)修改列表(使用add(..) 操作等)的过程。共享部分列表将使使用addAll(..)(内部使用System.arraycopy(..))扩展复制列表元素变得多余。

是否有任何轻量级的List 实现可以满足我的需求?或者有没有一种比较简单的自己实现的方法?

【问题讨论】:

  • 创建列表集合的过程是否知道可重复使用的部分,还是希望自己发现它们?
  • 它真的需要是一个列表吗?这个列表集合的消费者关心 List api 的哪些部分,您是否控制他们声明的参数类型? Iterable(如果消费者只迭代)或 Set(如果顺序无关),甚至 MultiSet(顺序无关,但允许多个)都有简单的解决方案,但 List 似乎缺少此功能。
  • @jaco0646 该过程知道可重用部分,就好像会调用addAll(reusablePart)
  • @Douglas Consumers 主要希望遍历列表,并且可能随机访问它(但这不是主要问题)。

标签: java list shared-memory


【解决方案1】:

对于IterableSetMultisetGuava 分别覆盖了Iterables.concat()Sets.union()Multisets.sum()。很遗憾,Lists 缺少等效的方法。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 2020-08-13
    • 2011-02-23
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多