2011-09-13 48 views
30

Tôi đã thử mã dưới đâyjava.lang.UnsupportedOperationException tại java.util.AbstractList.remove (Unknown Source)

String s[]={"1","2","3","4"}; 
Collection c=Arrays.asList(s); 
System.out.println(c.remove("1") +" remove flag"); 

System.out.println(" collcetion "+c); 

tôi đã nhận được

Exception in thread "main" java.lang.UnsupportedOperationException 
at java.util.AbstractList.remove(Unknown Source) 
at java.util.AbstractList$Itr.remove(Unknown Source) 
at java.util.AbstractCollection.remove(Unknown Source) 
at test.main(test.java:26) 

bất cứ ai có thể giúp tôi để giải quyết vấn đề này ?

+2

Câu hỏi là gì? –

+4

Đây có phải là mục blog không? – Jacob

+0

để bạn biết câu trả lời? – Bajji

Trả lời

18

Dễ dàng thực hiện xung quanh chỉ để chuyển vào Danh sách thành một hàm tạo của ArrayList.

Ví dụ:

 
String valuesInArray[]={"1","2","3","4"}; 
List modifiableList = new ArrayList(Arrays.asList(valuesInArray)); 
System.out.println(modifiableList.remove("1") + " remove flag"); 
System.out.println(" collcetion "+ modifiableList); 

đáp ứng:

remove đúng cờ

collcetion [2, 3, 4]

+0

Với hoạt động 'List.remove()' có một chỉ mục, tôi nghĩ rằng nên là 'modifiableList.remove (0)'. –

+1

Hey @NickMaynard, nó hoạt động cả với các chỉ mục: https://docs.oracle.com/javase/8/docs/api/java/util/List.html#remove-int- và với các giá trị: https: // docs .oracle.com/javase/8/docs/api/java/util/List.html # remove-java.lang.Object- –

+0

Bạn hoàn toàn đúng - xin lỗi :) –

23

Chỉnh sửa nhẹ: không, đây không phải là Bộ sưu tập không thể sửa đổi. Nó chỉ không hỗ trợ thêm và loại bỏ các phần tử, bởi vì nó được hỗ trợ bởi mảng được cung cấp và mảng không thể thay đổi kích thước. Nhưng nó hỗ trợ các hoạt động như list.set(index, element)

+1

không thực sự hiểu tại sao nó hoạt động, nhưng cảm ơn Sean ;-) – Michel

+2

@Michel hầu hết các công việc được thực hiện bởi java.util.AbstractList, nhưng tất cả các phương thức tùy chọn mà ném UnsupportedOperationException. Các triển khai công khai như ArrayList ghi đè lên các phương thức no-op này, nhưng việc thực hiện bên trong 'Bộ sưu tập $ Arraylist' được sử dụng bởi' Arrays.asList (...) 'không ghi đè phương thức thêm. (nhưng nó ghi đè lên phương thức thiết lập được đề cập ở trên) –

1

Tôi đã có vấn đề này, bởi vì Tôi cũng đang khởi tạo danh sách của mình với Arrays.asList:

List<String> names = Arrays.asList("a", "b", "c"); 

Để giải quyết vấn đề này, tôi đã sử dụng addAll thay vì:

List<String> names = new ArrayList<String>(); 
names.addAll(Arrays.asList("a", "b", "c")); 

Bằng cách này bạn có thể chỉnh sửa danh sách, thêm các mục mới hoặc loại bỏ.

Các vấn đề liên quan