1

我在这里尝试了一些非常基本的java并且已经达到了一些令人头疼的地方。本质上,我需要将文件中的某些元素读入某种类型的数组或列表中,对它们进行排序,消除重复项,然后返回前三个元素。TreeSet 看起来非常适合,因为它可以进行排序并杀死重复项。我的问题是我对如何只返回前三个元素感到困惑。迭代器似乎一直运行在集合中。使用手动迭代器创建一个 while 循环以包含一个包含迭代器循环的 while 循环似乎令人困惑并且不太可能成功。这里的答案是我需要遍历树集并将每个元素放入一个数组列表中,以便我可以访问前三个元素吗?我的意思是,这似乎可行,但似乎非常复杂。

4

4 回答 4

3

使用番石榴你可以做

return Lists.newArrayList(Iterables.limit(treeSet, 3));
于 2011-05-06T19:50:55.813 回答
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());

如果您更喜欢“脱糖”版本?

于 2011-05-06T19:46:41.513 回答
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();
}
于 2011-05-06T19:52:31.520 回答
1

我会使用(希望您使用 Java 1.6):

Arrays.copyOf(myTreeSet.toArray(), Math.min(3, myTreeset.size()));

编辑:用我添加的尺寸防弹Math.min()

于 2011-05-06T19:56:24.327 回答