列表中的retainAll()会导致java中的错误

时间:2014-04-22 21:18:28

标签: java list collections set

我在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)

谢谢!

2 个答案:

答案 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);