Java 以循环方式从集合中获取元素子集
考虑一个包含100个元素的集合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子集?这些都是选择实施的重要问题 我
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);