Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以循环方式从集合中获取元素子集_Java_Algorithm - Fatal编程技术网

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

Java 以循环方式从集合中获取元素子集,java,algorithm,Java,Algorithm,考虑一个包含100个元素的集合 Set<String> originalSet; //[1....100] size is 100 必须检索以下内容: subset1[1-45], subset2[46-90], subset3[91-35], subset4[36-80] 最好的方法是什么。首先,集合是无序的,所以谈论索引等没有意义。列表在这里更有意义 接下来,你必须明确你所说的“最好”是什么意思。插入时的性能?随机存取?创建n-from-i子集?这些都是选择实施的重要问题 我

考虑一个包含100个元素的集合

Set<String> originalSet; //[1....100] size is 100
必须检索以下内容:

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

最好的方法是什么。

首先,
集合
是无序的,所以谈论索引等没有意义。
列表
在这里更有意义

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


我认为两个主要选项是链表,它对
子列表中的最后一个元素进行特殊处理,或者是一个基于数组的列表。

如果你的集合有一些顺序的概念,你可以用

Iterable<Iterable<String>> slices = 
   Iterables.limit(
       Iterables.partition(
           Iterables.skip(
               Iterables‌​.cycle(originalSet),
               i),
           n),
       m);
Iterable切片=
不可数极限(
不可分割(
伊特拉伯斯.斯基普(
易怒‌​.循环(原始集合),
i) ,,
n) ,,
m) );

如果你想要一套,你必须做一个
变换
或其他什么;如果你有Java 8,那就像
Iterables.transform(…,ImmutableSet::copyOf)
什么是“最好”?
Set
没有定义
get
方法;您将无法从任意索引中获取,因为
Set
接口无法保证您的支持集将从中获取索引。就像java中的哪个数据结构以循环方式提供子集方法或guava中的任何其他数据结构一样
Iterable<Iterable<String>> slices = 
   Iterables.limit(
       Iterables.partition(
           Iterables.skip(
               Iterables‌​.cycle(originalSet),
               i),
           n),
       m);