2016-12-28 99 views
-5

考虑一个具有类似100个元素的集合。以循环方式获取集合中元素的子集

Set<String> originalSet; //[1....100] size is 100 

从originalSet开始,(m)具有某个起始索引(i)的某个大小(n)的元素的子集必须被检索。

例子:

m = 4, n = 45, i = 1 

继已被检索

subset1[1-45], subset2[46-90], subset3[91-35], subset4[36-80] 

请告诉我这样做的最佳方式。

+1

你是什么意思“最好”? –

+0

'Set'没有在任何地方定义的'get'方法;你将无法从任意索引中获取数据,因为'Set'接口没有提供任何保证,你的支持集将*具有*索引。 – Makoto

+0

最好,因为在像Java中的数据结构提供循环方式的子集方法或任何其他数据结构从番石榴 – vjk

回答

0

假设你已经设置的顺序的一些想法,你可以用

Iterable<Iterable<String>> slices = 
    Iterables.limit(
     Iterables.partition(
      Iterables.skip(
       Iterables‌​.cycle(originalSet), 
       i), 
      n), 
     m); 

如果你想一组出这个写这篇文章,你必须做一个transform什么的;如果你的Java 8只是Iterables.transform(..., ImmutableSet::copyOf)之类的东西。

2

首先,Set是无序的,所以说说索引等没有意义。List会更有意义。

接下来,你必须明确你的意思是“最好的”。插入性能?随机访问?创建你的n-from-i子集?这些是选择实施的重要问题。

我认为两个主要选项将链接列表与特殊处理subList操作或基于数组的列表中的最后一个元素。