我有NavigableSet
,我希望獲得它的中值對象。從NavigableSet獲取特定索引處的元素
因爲它是一個NavigableSet
,我知道它是排序的,因此我知道它的中間值是中間元素或兩個中間元素的算術中間值。
因此,我想訪問set.size()/2
的元素,但NavigableSet
接口不允許我。
有沒有一種簡單的方法來獲取特定的元素,而無需手動迭代設置?
我有NavigableSet
,我希望獲得它的中值對象。從NavigableSet獲取特定索引處的元素
因爲它是一個NavigableSet
,我知道它是排序的,因此我知道它的中間值是中間元素或兩個中間元素的算術中間值。
因此,我想訪問set.size()/2
的元素,但NavigableSet
接口不允許我。
有沒有一種簡單的方法來獲取特定的元素,而無需手動迭代設置?
是的設置不允許你從一個特定的索引獲取元素。但是我認爲如果你將它轉換爲數組,那麼你將能夠實現你所需要的。我試過此示例代碼,看看是否有幫助:
NavigableSet set = new TreeSet<Integer>();
set.add(new Integer(5));
set.add(new Integer(4));
set.add(new Integer(3));
set.add(new Integer(2));
set.add(new Integer(1));
Integer medianIndex = set.size()/2;
System.out.println(set.toArray()[medianIndex]);
輸出:3
字符串按字母順序排列,看看這個小例子:
編輯:現在真的做你想要的。
public static void main(String[] args) {
NavigableSet<String> set = new TreeSet<String>();
set.add("gamma");
set.add("alpha");
set.add("beta");
System.out.println(Arrays.toString(set.toArray()));
int indexOfGamma = set.headSet("gamma").size();
System.out.println(indexOfGamma);
System.out.println(get(set, set.first(), indexOfGamma));
}
public static String get(NavigableSet<String> set, String e, int index) {
if (index == 0) {
return e;
}
return get(set, set.higher(e), --index);
}
這是輸出:
[alpha, beta, gamma]
2
gamma
我沒有做任何基準測試與更大的數據集,但我想它應該執行相當不錯。方法應該直接指向樹中的下一個元素。
對不起,但我不明白這與我的問題有什麼關係。 –
你是對的,我建議的只是另一種方式:查找集合中某個對象的索引。我很抱歉。 –
將它轉換爲數組是一個比遍歷它更昂貴的操作,所以我不會選擇這個解決方案。 –