Có vẻ hơi muộn nhưng đây là hai xu của tôi. Chúng ta không thể có List<int>như intmột kiểu nguyên thủy nên chúng ta chỉ có thể có List<Integer>.
Java 8 (mảng int)
int[] ints = new int[] {1,2,3,4,5};
List<Integer> list11 =Arrays.stream(ints).boxed().collect(Collectors.toList());
Java 8 trở xuống (mảng Integer)
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
Cần ArrayList và không List?
Trong trường hợp chúng tôi muốn triển khai cụ thể Liství dụ: ArrayListthì chúng tôi có thể sử dụng toCollectionnhư:
ArrayList<Integer> list24 = Arrays.stream(integers)
.collect(Collectors.toCollection(ArrayList::new));
Tại sao list21không thể được sửa đổi cấu trúc?
Khi chúng tôi sử dụng Arrays.asListkích thước của danh sách trả về là cố định vì danh sách được trả lại không phải java.util.ArrayList, nhưng một lớp tĩnh riêng được xác định bên trong java.util.Arrays. Vì vậy, nếu chúng ta thêm hoặc xóa các thành phần khỏi danh sách được trả về, một UnsupportedOperationExceptionsẽ được ném. Vì vậy, chúng ta nên đi với list22khi chúng ta muốn sửa đổi danh sách. Nếu chúng ta có Java8 thì chúng ta cũng có thể đi với list23.
Để rõ ràng list21có thể được sửa đổi theo nghĩa mà chúng ta có thể gọi list21.set(index,element)nhưng danh sách này có thể không được sửa đổi về mặt cấu trúc tức là không thể thêm hoặc xóa các thành phần khỏi danh sách. Bạn cũng có thể kiểm tra câu hỏi này .
Nếu chúng ta muốn một danh sách bất biến thì chúng ta có thể gói nó thành:
List<Integer> list 22 = Collections.unmodifiableList(Arrays.asList(integers));
Một điểm khác cần lưu ý là phương pháp Collections.unmodifiableList trả về một khung nhìn không thể thay đổi của danh sách đã chỉ định. Bộ sưu tập chế độ xem không thể thay đổi là một bộ sưu tập không thể thay đổi và cũng là chế độ xem trên bộ sưu tập sao lưu. Lưu ý rằng những thay đổi đối với bộ sưu tập sao lưu vẫn có thể xảy ra và nếu chúng xảy ra, chúng có thể được nhìn thấy qua chế độ xem không thể thay đổi.
Chúng ta có thể có một danh sách thực sự bất biến trong Java 9 và 10.
Danh sách thực sự bất biến
Java 9:
String[] objects = {"Apple", "Ball", "Cat"};
List<String> objectList = List.of(objects);
Java 10 (Danh sách thực sự bất biến) theo hai cách:
List.copyOf(Arrays.asList(integers))
Arrays.stream(integers).collect(Collectors.toUnmodifiableList());
Cũng kiểm tra câu trả lời này của tôi để biết thêm.
Arrays.asList(new int[] { 1, 2, 3 }); chắc chắn không biên dịch trong Java 1.4.2, bởi vì mộtint[]là không mộtObject[].