어레이에서 변경 가능한 목록을 작성하시겠습니까?
어레이로 변환하고 싶은 어레이가 있습니다.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
'it-source' 카테고리의 다른 글
Magento - 특정 속성 값을 가진 제품 검색 (0) | 2022.10.30 |
---|---|
HTML 버튼을 사용하여 JavaScript 함수 호출 (0) | 2022.10.30 |
MySQL/MariaDB의 이진 열에서 UUID 문자열을 포맷하는 방법 (0) | 2022.10.21 |
뷰에서 테이블 언더레이의 기본 키를 취득하다 (0) | 2022.10.21 |
JShell을 종료하고 명령줄로 돌아가려면 어떻게 해야 합니까? (0) | 2022.10.21 |