次のように初期化される配列があります。
Element[] array = {new Element(1), new Element(2), new Element(3)};
ArrayList
この配列をクラスのオブジェクトに変換したいと思います。
ArrayList<Element> arraylist = ???;
次のように初期化される配列があります。
Element[] array = {new Element(1), new Element(2), new Element(3)};
ArrayList
この配列をクラスのオブジェクトに変換したいと思います。
ArrayList<Element> arraylist = ???;
new ArrayList<>(Arrays.asList(array));
与えられた:
Element[] array = new Element[] { new Element(1), new Element(2), new Element(3) };
最も簡単な答えは次のとおりです。
List<Element> list = Arrays.asList(array);
これはうまくいきます。ただし、いくつかの注意事項があります。
ArrayList
。それ以外の場合は、UnsupportedOperationException
.asList()
、元の配列に基づいています。元の配列を変更すると、リストも変更されます。これは驚くべきことかもしれません。(古いスレッドですが、グアバやその他のライブラリやその他の詳細について言及していないため、わずか2セントです)
これらの悪ふざけを大幅に簡素化するグアバの方法を指摘する価値があります。
ImmutableList
クラスとそのof()
ファクトリcopyOf()
メソッドを使用します(要素を null にすることはできません)。
List<String> il = ImmutableList.of("string", "elements"); // from varargs
List<String> il = ImmutableList.copyOf(aStringArray); // from array
Lists
クラスとそのnewArrayList()
ファクトリ メソッドを使用します。
List<String> l1 = Lists.newArrayList(anotherListOrCollection); // from collection
List<String> l2 = Lists.newArrayList(aStringArray); // from array
List<String> l3 = Lists.newArrayList("or", "string", "elements"); // from varargs
他のクラスの他のデータ構造の同様のメソッドにも注意してくださいSets
。
主な魅力は、Guavaファクトリ メソッドを使用するとほとんどの場合型を推測できるため、型安全のためのジェネリックスによる混乱を減らすことです。ただし、Java 7 が新しい diamond 演算子とともに登場して以来、この引数の根拠は少なくなりました。
しかし、それが唯一の理由ではありません (Java 7 はまだどこにでもあるわけではありません)。短縮構文も非常に便利であり、上記のメソッド初期化子を使用すると、より表現力豊かなコードを記述できます。現在のJavaコレクションで2回かかることを1回のグアバ呼び出しで行います。
でラップされた JDK のArrays
クラスとそのasList()
ファクトリ メソッドを使用しCollections.unmodifiableList()
ます。
List<String> l1 = Collections.unmodifiableList(Arrays.asList(anArrayOfElements));
List<String> l2 = Collections.unmodifiableList(Arrays.asList("element1", "element2"));
返される型asList()
はList
具体的なArrayList
実装を使用していますが、 NOT で java.util.ArrayList
あることに注意してください。これは内部型であり、エミュレートしますArrayList
が、実際には渡された配列を直接参照し、それを「ライトスルー」にします (変更は配列に反映されます)。
List
単純に を拡張することによる API のメソッドの一部による変更を禁止しますAbstractList
(そのため、要素の追加または削除はサポートされていません) が、set()
要素をオーバーライドするための の呼び出しを許可します。したがって、このリストは本当に不変ではなく、への呼び出しasList()
は でラップする必要がありCollections.unmodifiableList()
ます。
変更可能なリストが必要な場合は、次の手順を参照してください。
上記と同じですが、実際のjava.util.ArrayList
:でラップされています。
List<String> l1 = new ArrayList<String>(Arrays.asList(array)); // Java 1.5 to 1.6
List<String> l1b = new ArrayList<>(Arrays.asList(array)); // Java 1.7+
List<String> l2 = new ArrayList<String>(Arrays.asList("a", "b")); // Java 1.5 to 1.6
List<String> l2b = new ArrayList<>(Arrays.asList("a", "b")); // Java 1.7+
// for Java 1.5+
static <T> List<T> arrayToList(final T[] array) {
final List<T> l = new ArrayList<T>(array.length);
for (final T s : array) {
l.add(s);
}
return (l);
}
// for Java < 1.5 (no generics, no compile-time type-safety, boo!)
static List arrayToList(final Object[] array) {
final List l = new ArrayList(array.length);
for (int i = 0; i < array.length; i++) {
l.add(array[i]);
}
return (l);
}
この質問はかなり古いので、誰もまだ最も単純な形式を提案していないことに驚いています。
List<Element> arraylist = Arrays.asList(new Element(1), new Element(2), new Element(3));
Java 5以降Arrays.asList()
、varargsパラメーターを取り、配列を明示的に作成する必要はありません。
new ArrayList<T>(Arrays.asList(myArray));
myArray
が と同じ型であることを確認してくださいT
。たとえばList<Integer>
、 の配列からを作成しようとすると、コンパイラ エラーが発生します。int
別の方法 (基本的にはnew ArrayList(Arrays.asList(array))
ソリューションのパフォーマンスと同等ですが、次のようになります。
Collections.addAll(arraylist, array);
Java 9では、List.of
静的ファクトリ メソッドを使用してList
リテラルを作成できます。次のようなもの:
List<Element> elements = List.of(new Element(1), new Element(2), new Element(3));
これは、 3 つの要素を含む不変のリストを返します。変更可能なリストが必要な場合は、そのリストをArrayList
コンストラクターに渡します。
new ArrayList<>(List.of(// elements vararg))
JEP 269は、 Java Collections APIのいくつかの便利なファクトリ メソッドを提供します。これらの不変の静的ファクトリ メソッドは、Java 9 以降のList
、Set
、およびインターフェースに組み込まれています。Map
おそらく、ArrayList ではなく、List が必要なだけです。その場合、次のことができます。
List<Element> arraylist = Arrays.asList(array);
もう 1 つの更新は、ほぼ 2014 年に終了しますが、Java 8 でも実行できます。
ArrayList<Element> arrayList = Stream.of(myArray).collect(Collectors.toCollection(ArrayList::new));
これが単なるList
List<Element> list = Stream.of(myArray).collect(Collectors.toList());
Java 8 以降、より簡単に変換する方法があります。
import java.util.List;
import static java.util.stream.Collectors.toList;
public static <T> List<T> fromArray(T[] array) {
return Arrays.stream(array).collect(toList());
}
さまざまな方法で変換できます
List<Element> list = Arrays.asList(array);
List<Element> list = new ArrayList();
Collections.addAll(list, array);
Arraylist list = new Arraylist();
list.addAll(Arrays.asList(array));
詳細については、http://javarevisited.blogspot.in/2011/06/converting-array-to-arraylist-in-java.htmlを参照してください。
すべてが言ったように、これはそうするでしょう
new ArrayList<>(Arrays.asList("1","2","3","4"));
配列を作成する一般的な最新の方法はobservableArraysです
ObservableList:変更が発生したときにリスナーが追跡できるようにするリスト。
Java SEの場合は試すことができます
FXCollections.observableArrayList(new Element(1), new Element(2), new Element(3));
observableArrayList() arraylist に基づく新しい空の観測可能なリストを作成します。observableArrayList(E... items) アイテムが追加された新しいオブザーバブル配列リストを作成します。
また、Java 9では少し簡単です:
List<String> list = List.of("element 1", "element 2", "element 3");
Java 8 のストリームでも実行できます。
List<Element> elements = Arrays.stream(array).collect(Collectors.toList());
次のコードを使用して、要素配列を ArrayList に変換します。
Element[] array = {new Element(1), new Element(2), new Element(3)};
ArrayList<Element>elementArray=new ArrayList();
for(int i=0;i<array.length;i++) {
elementArray.add(array[i]);
}
Java 8 の Arrays クラスは、プリミティブ配列とオブジェクト配列の両方を受け入れるオーバーロードされたバージョンを持つ stream() メソッドを提供します。
/**** Converting a Primitive 'int' Array to List ****/
int intArray[] = {1, 2, 3, 4, 5};
List<Integer> integerList1 = Arrays.stream(intArray).boxed().collect(Collectors.toList());
/**** 'IntStream.of' or 'Arrays.stream' Gives The Same Output ****/
List<Integer> integerList2 = IntStream.of(intArray).boxed().collect(Collectors.toList());
/**** Converting an 'Integer' Array to List ****/
Integer integerArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
List<Integer> integerList3 = Arrays.stream(integerArray).collect(Collectors.toList());
以下のコードは、これを行う良い方法のようです。
new ArrayList<T>(Arrays.asList(myArray));
通常のサイズの配列の場合、上記の答えは有効です。配列のサイズが大きく、Java 8 を使用している場合は、ストリームを使用して実行できます。
Element[] array = {new Element(1), new Element(2), new Element(3)};
List<Element> list = Arrays.stream(array).collect(Collectors.toList());