1

私はここでいくつかの非常に基本的な Java を試しており、頭を悩ませています。基本的に、ファイルから何らかの要素を読み取り、それらを並べ替え、重複を排除してから、最初の 3 つの要素を返す必要があります。TreeSet は、並べ替えを行って重複を削除するので、完璧に適合するように思えました。私の問題は、最初の 3 つの要素のみを返す方法について混乱していることです。イテレータは、セット全体を実行しているようです。手動の反復子を使用して while ループを作成し、反復子ループを保持する while ループを含めることは、混乱を招き、成功する可能性が低いようです。最初の 3 つの要素にアクセスできるように、ツリーセットを繰り返し処理し、各要素を配列リストに配置する必要があるという答えはここにありますか? つまり、これは機能するようですが、非常に複雑に思えます。

4

4 に答える 4

3

Guavaを使用すると、次のことができます

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

私は使用します(Java 1.6を使用することを期待しています):

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

編集:追加したサイズで防弾になるMath.min()

于 2011-05-06T19:56:24.327 に答える
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 に答える