【发布时间】: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