it-source

어레이에서 변경 가능한 목록을 작성하시겠습니까?

criticalcode 2022. 10. 30. 11:05
반응형

어레이에서 변경 가능한 목록을 작성하시겠습니까?

어레이로 변환하고 싶은 어레이가 있습니다.List, 배열의 내용을 변경합니다.

Stack Overflow에는 다음과 같은 다양한 질문과 답변이 있습니다.Arrays.asList()기본 어레이의 목록 보기만 제공하는 방법 및 결과 목록을 조작하려고 하면 일반적으로 이 목록이 느려집니다.UnsupportedOperationException목록을 조작하는 데 사용되는 방법(예:add(),remove()( 등)는, 이하의 리스트의 실장에서는 실장되지 않습니다.Arrays.asList().

그러나 어레이를 가변 목록으로 변환하는 예를 찾을 수 없습니다.어레이를 루핑해서put()각 값을 새 목록으로 만듭니다만, 이 작업을 수행할 수 있는 인터페이스가 있는지 궁금합니다.

한 가지 간단한 방법:

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

그러면 변경 가능한 목록이 생성되지만 원래 배열의 복사본이 됩니다.목록을 변경해도 어레이는 변경되지 않습니다.물론 나중에 다시 복사할 수 있습니다.toArray.

어레이에 가변 를 작성하려면 직접 구현해야 합니다.

Google 컬렉션 API(Guava)를 사용하는 경우:

Lists.newArrayList(myArray);

Java 8에 포함된 Stream API를 사용하는 이 간단한 코드는 배열 요소를 포함하는 가변 목록(또는 뷰)을 만듭니다.

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

또는 동등하게 유효합니다.

List<Foo> list = Arrays.stream(array).collect(Collectors.toCollection(ArrayList::new));

Eclipse Collections(이전의 GS Collections)를 사용하는 경우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);

두 방법의 차이는 배열이 복사되는지 여부입니다. 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 Collections의 커밋입니다.

myNewArrayList = new ArrayList<>(Arrays.asList(myArray));

언급URL : https://stackoverflow.com/questions/11659173/create-mutable-list-from-array

반응형