[英]Accessing elements in a treeset
我在這里嘗試一些非常基本的Java,但已經有點麻煩了。 本質上,我需要將文件中的某些元素讀入某種類型的數組或列表,對其進行排序,消除重復項,然后返回前三個元素。 TreeSet看起來很適合,因為它可以進行排序並殺死重復項。 我的問題是,我對如何僅返回前三個元素感到困惑。 迭代器似乎一直貫穿整個集合。 使用手動迭代器創建一個while循環以包含一個包含該迭代器循環的while循環似乎很混亂,不太可能成功。 這里的答案是我需要遍歷樹集並將每個元素放入一個數組列表中,以便隨后可以訪問前三個元素嗎? 我的意思是,這似乎行得通,但似乎令人費解。 提示?
使用番石榴,你可以做
return Lists.newArrayList(Iterables.limit(treeSet, 3));
嗯 顯而易見的東西怎么了?
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());
如果您更喜歡“ desugared”版本?
字符串示例:
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();
}
我會使用(期望您使用Java 1.6):
Arrays.copyOf(myTreeSet.toArray(), Math.min(3, myTreeset.size()));
編輯 :要防彈,我添加了Math.min()
TreeSet<String> tree = new TreeSet<String>();
// fill the tree set
String[] stringArray = new String[tree.size()];
tree.toArray(stringArray);
我認為這要容易得多。 有用的事情是toArray(T[] a)
采用一個通用的數組參數,該參數可以幫助您幾乎指定要與TreeSet<>
中的數據匹配的任何數組類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.