以循环方式从集合中获取元素的子集

时间:2016-12-28 17:38:44

标签: java algorithm

考虑一个包含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]

这是最好的方法。

2 个答案:

答案 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)那样。