101

List配列の内容を変更するために、に変換したい配列があります。

Arrays.asList()Stack Overflowには、基になる配列のリストビューのみを提供する方法と、結果のリストを操作しようとするとUnsupportedOperationException、リストの操作に使用されるメソッド(たとえばadd()remove()など)として一般的にどのようにスローされるかについての質問/回答がたくさんあります。によって提供されるリスト実装では実装されていませんArrays.asList()

しかし、配列を可変リストに変換する方法の例を見つけることができません。配列とput()各値をループして新しいリストに入れることができると思いますが、これを行うためのインターフェイスが存在するかどうか疑問に思っています。

4

5 に答える 5

138

1つの簡単な方法:

Foo[] array = ...;
List<Foo> list = new ArrayList<Foo>(Arrays.asList(array));

これにより、変更可能なリストが作成されますが、元の配列のコピーになります。リストを変更しても配列は変更されません。もちろん、を使用して後でコピーして戻すことができますtoArray

配列に可変ビューを作成したい場合は、それを自分で実装する必要があると思います。

于 2012-07-25T21:51:47.647 に答える
34

また、GoogleコレクションAPI(Guava)を使用している場合:

Lists.newArrayList(myArray);
于 2013-10-11T13:11:11.340 に答える
13

Java8に含まれているStreamAPIを使用するこの単純なコードは、配列の要素を含む可変リスト(またはビュー)を作成します。

Foo[] array = ...;
List<Foo> list = Stream.of(array).collect(Collectors.toCollection(ArrayList::new));

または、同様に有効です。

List<Foo> list = Arrays.stream(array).collect(Collectors.toCollection(ArrayList::new));
于 2017-01-28T01:55:27.553 に答える
5

Eclipseコレクション(以前のGSコレクション)を使用している場合は、またはを使用できFastList.newListWith(...)ますFastList.wrapCopy(...)

どちらのメソッドもvarargsを使用するため、配列をインラインで作成するか、既存の配列を渡すことができます。

MutableList<Integer> list1 = FastList.newListWith(1, 2, 3, 4);

Integer[] array2 = {1, 2, 3, 4};
MutableList<Integer> list2 = FastList.newListWith(array2);

2つの方法の違いは、配列がコピーされるかどうかです。newListWith()配列をコピーしないため、一定の時間がかかります。アレイが他の場所で変更される可能性があることがわかっている場合は、使用を避ける必要があります。

Integer[] array2 = {1, 2, 3, 4};
MutableList<Integer> list2 = FastList.newListWith(array2);
array2[1] = 5;
Assert.assertEquals(FastList.newListWith(1, 5, 3, 4), list2);

Integer[] array3 = {1, 2, 3, 4};
MutableList<Integer> list3 = FastList.wrapCopy(array3);
array3[1] = 5;
Assert.assertEquals(FastList.newListWith(1, 2, 3, 4), list3);

注:私はEclipseコレクションのコミッターです。

于 2013-11-18T18:23:00.937 に答える
0
myNewArrayList = new ArrayList<>(Arrays.asList(myArray));
于 2012-07-25T21:52:37.403 に答える