我正在嘗試一些非常基本的java,並且已經達到了一點頭部劃痕。實質上,我需要從文件中讀取某些元素,將其轉換爲某種類型的數組或列表,對它們進行排序,消除重複項,然後返回前三個元素。 TreeSet看起來非常適合它,並且殺死了重複項。我的問題是,我對如何僅返回前三個要素感到困惑。迭代器似乎貫穿整個集合。用手動迭代器創建一個while循環來包含一個持有迭代器循環的while循環似乎令人困惑,並且不太可能成功。這裏的答案是我需要遍歷treeset並將每個元素放入一個數組列表中,以便我可以訪問前三個元素?我的意思是,這似乎有效,但看起來非常複雜。提示?訪問treeset中的元素
1
A
回答
1
例子:
TreeSet<String> treeSet = new TreeSet<String>();
// you populate treeSet with data
String[] stringArray = new String[NUMBER_OF_NEEDED_RECORDS];
for(int i =0; i < NUMBER_OF_NEEDED_RECORDS; i++) {
stringArray[i] = treeSet.pollFirst();
}
2
嗯。顯而易見的問題是什麼?
ArrayList<MyType> buffer = new ArrayList<MyType>(3);
for(MyType elt: myTreeSet) {
buffer.add(elt);
if(buffer.size() == 3) break;
}
或者
ArrayList<MyType> buffer = new ArrayList<MyType>(3);
Iterator<MyType> iter = myTreeSet.iterator();
while(iter.hasNext() && buffer.size() < 3) buffer.add(iter.next());
如果你喜歡 「脫糖」 版本
?
3
使用Guava你可能只是做字符串
return Lists.newArrayList(Iterables.limit(treeSet, 3));
1
我會用(希望您使用Java 1.6):
Arrays.copyOf(myTreeSet.toArray(), Math.min(3, myTreeset.size()));
編輯:要防彈,尺碼我加Math.min()
0
TreeSet<String> tree = new TreeSet<String>();
// fill the tree set
String[] stringArray = new String[tree.size()];
tree.toArray(stringArray);
我覺得這很容易。有用的是,方法toArray(T[] a)
採用通用數組參數,它可以幫助您指定幾乎所有與TreeSet<>
中的數據匹配的數組類型。
相關問題
- 1. TreeSet中的排名元素
- 2. TreeSet vs Arraylist:修改元素
- 3. 元素後取出在TreeSet中
- 4. 訪問IBOutletCollection中的元素
- 5. 訪問元素
- 6. 訪問元素?
- 7. 訪問元素
- 8. 訪問元素
- 9. 訪問元素
- 10. 訪問元素
- 11. 訪問元素
- 12. 如何訪問元組中的元素?
- 13. 訪問元素的子元素
- 14. 訪問JSON元素
- 15. 訪問html元素?
- 16. jquery:訪問元素
- 17. 訪問UI元素
- 18. Dataframe元素訪問
- 19. 訪問div元素
- 20. 訪問元素值
- 21. 訪問GUI元素
- 22. scala treeset無法刪除元素
- 23. 如何訪問gridview的選中/選中行元素的元素
- 24. 訪問點擊的元素
- 25. 訪問HostListener的HTML元素
- 26. 訪問HashMap的元素
- 27. 訪問子元素(jQuery的)
- 28. colorbox內的訪問元素
- 29. 訪問元素的onclick
- 30. 訪問元素的n-gram
使用'toArray()'會在你只需要前3個時複製整個內容。它看起來比人工循環更好,但是很浪費。 – ColinD 2011-05-06 20:02:14
重複檢查並且必須同意你的意見。 – 2011-05-06 20:07:47