2011-12-11 8 views
1

LinkedListクラスを使用して配列のいずれかをロードしようとしています。私はaddAllメソッドのドキュメンテーションを見ていましたが、ほとんど手間をかけずに配列を読み込むことができました。LinkedList Javaクラスを使用する

addAll(int index, Collection<? extends E> c) 
     Inserts all of the elements in the specified collection into this list, 
     starting at the specified position. 

しかし、どのように構造化するかはわかりません。

オブジェクトの配列があり、オブジェクトをリンクリストに読み込もうとしています。
どうすればいいですか?

注:削除と追加を複数回行う予定なので、リストにロードしようとしています。

私はコードの下に使用されるが、私はエラーを取得:

int[] a = new int[5]; 
    for(int index = 0; index<5; index++){ 
     a[index] = index; 

    } 

    List<Integer> list = new LinkedList<Integer>(); 
    list.addAll(Arrays.asList(a)); //error Here won't take a[] 
+0

私はArrayListと一緒に行ったが、なぜこれが動作していないのかを知るためにかゆいですか? – Tags

+0

理由のための更新された答えを見なさい。 – Premraj

答えて

2

あなたは特別のLinkedListまたは可変コレクションクラスが必要な場合(あなたは上記の追加/削除操作の場合)Arrays.asList(T...)は、指定された配列に基づいた固定サイズのリストを返すので変更できません。Arrays.asList(T...).add(T)呼び出しは常に失敗します。

配列が必要ない場合は、ArrayListまたはLinkedListのように、先頭からコレクションクラスを使用します。可能であれば、このcollection tutorialはあなたに使用法やその他の側面について公正なアイデアを提供します。

には、ArrayList(またはLinkedListの)を作成するwanto場合に使用することができます(と、それをリストに配列のすべての要素をコピーします) -

new ArrayList<Element>(Arrays.asList(array)) 


EDIT -

配列自体がプリミティブ配列(例で示した配列)の場合、Arrays.asList(int[])は実際には単一の要素List<int[]>を返してしまうため、上記のアプローチは機能しません。そのため、あなたの例でエラーが発生しています。あなた自身がプリミティブのコレクションを重く作業見つけた場合、私はTroveを見てことをお勧めまたは日のニーズにコレクションや他の日に関連する素晴らしいユーティリティを提供Guavaかもしれ
(それはあなたの要件を満たすInts.asList()方法があり、docを参照してください) 。リストに配列を変換することにより

+0

あなたのお話をご理解いただき、ありがとうございます。私のチームメイトはプロジェクトのために配列を使うことに決めました(私は同意しませんでした)。リストをランダムに増減するので、オブジェクトを削除して追加します。しかし、私は自分のリストにそれらの配列を取得する必要があります。 – Tags

+0

@Henry then 'new ArrayList (Arrays.asList(array))'は行く方法です。 – Premraj

+0

プレミス、ありがとう、私はArrayListと一緒に行きます。それは理にかなって、私が必要とすることをするでしょう。 – Tags

0

あなたはjava.util.Arraysクラスを使用することができます。

List<MyType> list = Arrays.asList(array); 
+1

...またはOPは配列の代わりに 'ArrayList 'を使用している可能性があります。 – Spoike

+0

これは、配列の内容ではなく、配列のインスタンスをリストに追加するだけです。 – Tags

+0

私は配列側で何もできません。このプロジェクトは、人々によって個別に行われています。デッドスポット(ヌル)についてシフトや心配はしないので、リストが必要です。 – Tags

1

起動して、リンクリストにこのリストのすべての要素を追加します。

List<Foo> list = new LinkedList<Foo>(); 
list.addAll(Arrays.asList(myArray()); 

それとも配列を介して自分自身を反復処理し、すべての要素を追加します。

List<Foo> list = new LinkedList<Foo>(); 
for (Foo foo : myArray) { 
    list.add(foo); 
} 

これはコードがもう1行必要で、簡単で効率的です。

ほとんどの状況で、ArrayListがLinkedListより効率的であることに注意してください。

関連する問題