簡體   English   中英

訪問樹集中的元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM