조금 늦게 보이지만 여기에 2 센트가 있습니다. 우리는 할 수 없습니다 List<int>
와 같은 int
우리 만 할 수 있도록 기본 유형이List<Integer>
.
자바 8 (int array)
int[] ints = new int[] {1,2,3,4,5};
List<Integer> list11 =Arrays.stream(ints).boxed().collect(Collectors.toList());
Java 8 이하 (정수 배열)
Integer[] integers = new Integer[] {1,2,3,4,5};
List<Integer> list21 = Arrays.asList(integers); // returns a fixed-size list backed by the specified array.
List<Integer> list22 = new ArrayList<>(Arrays.asList(integers)); // good
List<Integer> list23 = Arrays.stream(integers).collect(Collectors.toList()); //Java 8 only
목록이 아닌 ArrayList가 필요하십니까?
List
예 ArrayList
를 들어 특정 구현을 원할 경우 다음 toCollection
과 같이 사용할 수 있습니다 .
ArrayList<Integer> list24 = Arrays.stream(integers)
.collect(Collectors.toCollection(ArrayList::new));
왜 list21
구조적으로 수정할 수 없습니까?
Arrays.asList
반환 된리스트의 크기는 고정 된 것이 아니라 java.util.ArrayList
내부에 정의 된 전용 정적 클래스 이기 때문에 고정 된 크기를 사용할 때 고정 됩니다 java.util.Arrays
. 따라서 반환 된 목록에서 요소를 추가하거나 제거 UnsupportedOperationException
하면가 발생합니다. 따라서 list22
목록을 수정하고 싶을 때 함께 가야 합니다. 우리가 Java8을 가지고 있다면 우리는 또한 갈 수 있습니다 list23
.
명확하게하기 위해 list21
호출 할 수 있다는 의미에서 수정 될 수 list21.set(index,element)
있지만이 목록은 구조적으로 수정되지 않을 수 있습니다. 즉, 목록에서 요소를 추가하거나 제거 할 수 없습니다. 이 질문을 확인할 수도 있습니다 .
불변 목록을 원하면 다음과 같이 랩핑 할 수 있습니다.
List<Integer> list 22 = Collections.unmodifiableList(Arrays.asList(integers));
주목해야 할 또 다른 요점은 Collections.unmodifiableList
가 지정된 목록의 수정 불가능한보기를 리턴한다는 것입니다. 수정할 수없는보기 모음은 수정할 수없는 모음이며 배경 모음에 대한보기이기도합니다. 백업 컬렉션에 대한 변경은 여전히 가능할 수 있으며, 변경이 발생하면 수정할 수없는보기를 통해 볼 수 있습니다.
우리는 Java 9와 10에서 불변의 목록을 가질 수 있습니다.
진정한 불변 목록
자바 9 :
String[] objects = {"Apple", "Ball", "Cat"};
List<String> objectList = List.of(objects);
두 가지 방법으로 Java 10 (Truly Immutable list) :
List.copyOf(Arrays.asList(integers))
Arrays.stream(integers).collect(Collectors.toUnmodifiableList());
또한이 답변 을 확인하십시오 .
Arrays.asList(new int[] { 1, 2, 3 })
; 가 있기 때문에 확실히, 자바 1.4.2에서 컴파일되지 않은int[]
것입니다 하지Object[]
.