2016-12-28 12 views
-5

100要素のような集合を考える。円の方法で要素の集合を集合から得る

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

originalSetからは、いくつかのサイズ(n)の要素の一部が開始インデックス(i)で取り出される必要があります。

例:

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のどのdatastructureが循環メソッドまたはグアバからの他のデータ構造でもサブセットメソッドを提供するようなもの – 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サブセットの作成?これらは実装を選択する重要な質問です。

私は、2つの主要な選択肢は、subList操作の最後の要素または配列ベースのリストの特別な処理とリストをリンクすると考えています。あなたはこの外に設定したい場合

関連する問題