我在java中遇到了retainAll()的一些问题。我有一个有效的列表,如下所示。但是,当我尝试使用retailAll()找到两者之间的交集时,会导致以下错误。
String[] a = {"3", "3", "10", "4", "2", "8"};
String[] b = {"10", "4", "12", "3", "23", "1", "8"};
List<String> aList = Arrays.asList(a);
List<String> bList = Arrays.asList(b);
aList.retainAll(bList);
抛出此异常:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:659)
at java.util.AbstractList$SimpleListIterator.remove(AbstractList.java:77)
at java.util.AbstractCollection.retainAll(AbstractCollection.java:276)
at JavaTest.main(JavaTest.java:16)
谢谢!
答案 0 :(得分:5)
Arrays.asList
返回固定大小的列表。所以你不能添加或删除元素。
使用代替集合的ArrayList
构造函数。
List<String> aList = new ArrayList<>(Arrays.asList(a));
答案 1 :(得分:0)
错误是提供的列表未实现您想要的方法。这可能是因为Arrays.asList只是一个处理重要函数的存根列表。您可能希望执行以下操作。
List<String> aList = new ArrayList<String>(Arrays.asList(a));
List<String> bList = Arrays.asList(b);
aList.retainAll(bList);