2016-12-28 109 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操作或基於數組的列表中的最後一個元素。