0

Set(およびその他のコレクション)でのtoArray(T [])メソッドの設計と適切な使用について混乱しています。文字列のセットがある場合、メソッドが新しい文字列配列を割り当てる場合、サイズ0の文字列の配列を指定する必要があるのはなぜですか?

Set<String> stringSet = new Set<String>();
// bla bla bla, insert Strings to set
String[] array = stringSet.toArray(new String[0]);

余分な配列や明示的な型変換を割り当てずに、配列を取得するためのより良い方法はありますか?

4

2 に答える 2

2

このパラメーターは、作成される配列のタイプを検出するために使用されます。

なぜJVMはstringSetのジェネリック型パラメーターを使用して型を検出しないのかと議論することができます。答えは、実行時に型消去のためにジェネリック型パラメーターが不明であるということです。つまり、コンパイル後にSet<String>がSetになります。

toArray(new Object [0])は、関数がtoArray()と同じです。

セットが指定された配列に収まる場合、そのセットが返されます。それ以外の場合は、指定されたアレイのランタイムタイプとこのセットのサイズで新しいアレイが割り当てられます。

于 2012-08-10T00:01:59.103 に答える
0

setコレクションを使用している場合、自分(または他のコレクション)に含まれるエントリの正確な数がわからない場合があります。最初からエントリの数がわかっている場合は、コレクションの代わりに配列を使用してみませんか?

私の見方では、このメソッドは、コレクションに含まれるエントリの数が事前toArray()にわからないコレクションを使用して配列を作成する簡単な方法です。

于 2012-08-10T00:21:39.903 に答える