ดูเหมือนว่าจะสายเล็กน้อย แต่ที่นี่เป็นสองเซ็นต์ของฉัน เราไม่สามารถมีList<int>
ฐานะเป็นชนิดดั้งเดิมเพื่อให้เราสามารถมีเพียงint
List<Integer>
Java 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 ใช่หรือไม่
ในกรณีที่เราต้องการใช้งานเฉพาะของ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
จะคืนค่ามุมมองที่ไม่สามารถเปลี่ยนแปลงได้ของรายการที่ระบุ คอลเล็กชันมุมมอง unmodifiable คือคอลเล็กชันที่ไม่สามารถแก้ไขได้และเป็นมุมมองไปยังคอลเล็กชันสำรอง โปรดทราบว่าการเปลี่ยนแปลงในคอลเลกชันสำรองอาจยังคงเป็นไปได้และหากเกิดขึ้นพวกเขาจะสามารถมองเห็นได้ผ่านมุมมองที่ไม่สามารถแก้ไขได้
เราสามารถมีรายชื่อไม่เปลี่ยนแปลงอย่างแท้จริงใน Java 9 และ 10
รายการไม่น่าเชื่อถืออย่างแท้จริง
Java 9:
String[] objects = {"Apple", "Ball", "Cat"};
List<String> objectList = List.of(objects);
Java 10 (รายการไม่น่าเชื่อถือที่แท้จริง) ในสองวิธี:
List.copyOf(Arrays.asList(integers))
Arrays.stream(integers).collect(Collectors.toUnmodifiableList());
ตรวจสอบคำตอบของฉันนี้เพิ่มเติม
Arrays.asList(new int[] { 1, 2, 3 })
; แน่นอนไม่ได้รวบรวมในชวา 1.4.2 เพราะint[]
เป็นไม่Object[]