Java ArrayList中不支持的异常

Java ArrayList中不支持的异常,java,collections,Java,Collections,我正在执行一个程序,从2个字符的数组中删除重复项。我实现了这两个解决方案,解决方案1运行良好,但解决方案2给了我不支持的操作异常。为什么会这样?错误位于第al1行。删除所有(al2) public void getdifference(字符[]inp1,字符[]inp2){ //解决方案1: // ********************************************** List list1=新的ArrayList(Arrays.asList(inp1)); List lis

我正在执行一个程序,从2个字符的数组中删除重复项。我实现了这两个解决方案,解决方案1运行良好,但解决方案2给了我不支持的操作异常。为什么会这样?错误位于第
al1行。删除所有(al2)

public void getdifference(字符[]inp1,字符[]inp2){
//解决方案1:
// **********************************************
List list1=新的ArrayList(Arrays.asList(inp1));
List list2=新的ArrayList(Arrays.asList(inp2));
清单1.移除所有(清单2);
System.out.println(列表1);
System.out.println(“*******************************************************”);
//解决方案2:
字符a[]={'f','x','l','b','y'};
字符b[]={'x','b','d'};
List al1=新的ArrayList();
List al2=新的ArrayList();
al1=(Arrays.asList(a));System.out.println(al1);
al2=(Arrays.asList(b));System.out.println(al2);
al1.removeAll(al2);//这里有错误
系统输出打印项次(al1);
}
来自
asList(..)
文档:

返回指定数组支持的固定大小列表。(更改返回的列表“直写”到数组。)此方法与collection.toArray()结合使用,充当基于数组和基于集合的API之间的桥梁。返回的列表可序列化并实现随机访问

基本上,
asList
方法不会创建一个普通的可变
List
,而是在数组周围创建一个包装器。因此,
remove
操作在由数组支持的列表上不可用

尝试通过手动构建列表来构建列表:

List<Character> al1 = new ArrayList<Character>(Arrays.asList(a)) 
List al1=新的ArrayList(Arrays.asList(a))
因此,备份列表仅用于初始化
asList(..)
文档中的真实
数组列表

返回指定数组支持的固定大小列表。(更改返回的列表“直写”到数组。)此方法与collection.toArray()结合使用,充当基于数组和基于集合的API之间的桥梁。返回的列表可序列化并实现随机访问

基本上,
asList
方法不会创建一个普通的可变
List
,而是在数组周围创建一个包装器。因此,
remove
操作在由数组支持的列表上不可用

尝试通过手动构建列表来构建列表:

List<Character> al1 = new ArrayList<Character>(Arrays.asList(a)) 
List al1=新的ArrayList(Arrays.asList(a))

因此,备份列表仅用于初始化实际的
ArrayList

您使用的
Arrays.asList()
。并且这种类型的列表是不可修改的

政府明确表示:

返回由指定数组支持的固定大小列表。[我的重点]


您可以使用
数组.asList()
。并且这种类型的列表是不可修改的

政府明确表示:

返回由指定数组支持的固定大小列表。[我的重点]

Arrays.asList()
返回一个固定大小的列表。无法添加或删除任何条目

您可以通过以下方式解决此问题:

al1 = new ArrayList<Character>((Arrays.asList(a))); 
al1=newarraylist((Arrays.asList(a));
对于
al2
,情况也一样

这已经在顶级解决方案中发生

在第二种方法中,创建一个ArrayList,然后用固定的列表覆盖它,而不是填充它,保持可变。

Arrays.asList()
返回一个固定大小的列表。无法添加或删除任何条目

您可以通过以下方式解决此问题:

al1 = new ArrayList<Character>((Arrays.asList(a))); 
al1=newarraylist((Arrays.asList(a));
对于
al2
,情况也一样

这已经在顶级解决方案中发生


在第二种情况下,您创建一个ArrayList,然后用固定的ArrayList覆盖它,而不是填充它,保持可变。

异常stacktrace中引用的行号是多少?它对应于哪一行?请不要交叉发布到堆栈交换上的不同站点。它在java.util.AbstractList.remove(AbstractList.java:144)的java.util.AbstractList$Itr.remove(AbstractList.java:360)的java.util.AbstractCollection.removeAll的线程“main”java.lang.UnsupportedOperationException中显示异常(AbstractCollection.java:337)在dominator.dominator.getDiffernce(dominator.java:111)在dominator.dominator.main(dominator.java:23)异常堆栈跟踪中引用的行号是什么?它对应于哪一行?请不要在堆栈交换上交叉发布到不同的站点。它在线程“main”中显示异常java.util.AbstractList.remove(AbstractList.java:144)处java.util.AbstractList$Itr.remove(AbstractList.java:360)处java.util.AbstractCollection.removeAll(AbstractCollection.java:337)处dominator.dominator.getDiffernce(dominator.java:111)处dominator.dominator.main(dominator.java:23)al1.addAll((Arrays.asList(a));al2.addAll((Arrays.asList(b));addAll()对我有效。@JNL我正在建议另一种方法。这也是有效的。是的……同意你的方法。它只是让我想到了addAll()方法。尽管如此,以上所有的答案都帮助我了解了该方法。谢谢1.addAll((Arrays.asList(a));al2.addAll((Arrays.asList(b));addAll()对我有用。@JNL我正在建议另一种方法。这也是有效的。是的……同意你的方法。这让我想到了addAll()方法。尽管如此,上面的所有答案都帮助我了解了更多有关该方法的信息。谢谢