2011-07-01 11 views
0

コレクション。 toArray 上記の方法を使用してList<String>オブジェクトを同等のString[]に変換します。Collection.toArray()の正しい構文は何ですか?

List<String> foos = new ArrayList<String>(); 
// foos.toArray(new String[0]); 
// foos.toArray(new String[foos.length]); 

これは、これを配列に変換するための正しい方法です。

+0

foos.toArray(新しいString [foos.length] ); – doNotCheckMyBlog

答えて

3

foos.toArray(new String[foos.size()]); 

は、使用する正しいものです。配列にあまりにも短い配列toArrayを指定すると、toArrayは、指定した配列に要素を格納するのではなく、新しい配列を割り当てます。これは、Javaが1つではなく2つの配列を割り当て、このように数クロックサイクルを無駄にすることを意味します。また、新たな文字列で動作することが

+0

それはfoos.size()です –

+0

@Maurice:はい、正しいです。私はちょうど質問からコードをコピーしました... –

2

両方の機能のシグネチャが表示されている場合は、その違いを明確に分かります。

Object[] toArray(); 

返される配列は、このコレクションによってその配列への参照が保持されないため「安全」です。 (つまり、このメソッドは、このコレクションが配列によってサポートされていても、新しい配列を割り当てる必要があります)。したがって、呼び出し元は返された配列を自由に変更できます。

このメソッドは、配列ベースのAPIとコレクションベースのAPIの間のブリッジとして機能します。

<T> T[] toArray(T[] a); 

aこのコレクションの要素は、それが十分に大きい場合、格納されるべきされる配列。それ以外の場合は、同じ実行時型の新しい配列がこの目的のために割り当てられます。この1

+0

そう、私は正しいfoos.lengthを使用する必要がありますか? – Joe

+0

そのすべてはあなたが取り組んでいるコレクションに依存します。 'ArrayList'では長さを渡すほうがよいでしょう。しかし 'LinkedList'ではその必要はありません。 –

+0

しかし、私はそれに長さを渡す必要がありますことをお勧めします。 –

1
String array[] = foos.toArray(new String[foos.size()]); 

注意[0]が、配列が再割り当てされる必要がある場合foos.size()> 0

関連する問題