考虑一个包含100个元素的集合。
Set<String> originalSet; //[1....100] size is 100
从originalSet,(m)某些大小的元素子集(n)必须检索一些起始索引(i)。
示例:
m = 4, n = 45, i = 1
必须检索以下
subset1[1-45], subset2[46-90], subset3[91-35], subset4[36-80]
这是最好的方法。
答案 0 :(得分:2)
首先,Set
是无序的,所以谈论索引等是没有意义的。List
在这里会更有意义。
接下来,您必须明确“最佳”的含义。插入时的表现?随机访问?创建你的n-from-i子集?这些是选择实施的重要问题。
我认为两个主要选项是链接列表,对subList
操作中的最后一个元素或基于数组的列表进行特殊处理。
答案 1 :(得分:0)
假设你的集合有一些订单概念,你可以用
来写Iterable<Iterable<String>> slices =
Iterables.limit(
Iterables.partition(
Iterables.skip(
Iterables.cycle(originalSet),
i),
n),
m);
如果你想要这样做,你必须做transform
或其他事情;如果你的Java 8就像Iterables.transform(..., ImmutableSet::copyOf)
那样。