我正在实现一个程序来从 2 个字符数组中删除重复项。我实现了这 2 个解决方案,解决方案 1 工作正常,但解决方案 2 给了我 UnSupportedOperationException。为什么会这样?错误位于行 al1.removeAll(al2);
public void getDiffernce(Character[] inp1, Character[] inp2){
// SOLUTION 1:
// **********************************************
List<Character> list1 = new ArrayList<Character>(Arrays.asList(inp1));
List<Character> list2 = new ArrayList<Character>(Arrays.asList(inp2));
list1.removeAll(list2);
System.out.println(list1);
System.out.println("***************************************");
// SOLUTION 2:
Character a[] = {'f', 'x', 'l', 'b', 'y'};
Character b[] = {'x', 'b','d'};
List<Character> al1 = new ArrayList<Character>();
List<Character> al2 = new ArrayList<Character>();
al1 = (Arrays.asList(a)); System.out.println(al1);
al2 = (Arrays.asList(b)); System.out.println(al2);
al1.removeAll(al2); // error is here
System.out.println(al1);
}
最佳答案
来自asList(..)
文档:
Returns a fixed-size list backed by the specified array. (Changes to the returned list "write through" to the array.) This method acts as bridge between array-based and collection-based APIs, in combination with Collection.toArray(). The returned list is serializable and implements RandomAccess.
基本上是asList
方法不会创建正常的可变 List<E>
而是数组的包装器。 remove
因此,操作在数组支持的列表上不可用。
尝试通过手动构建列表来构建列表:
List<Character> al1 = new ArrayList<Character>(Arrays.asList(a))
以便支持列表仅用于初始化真实的 ArrayList
.
关于java - ArrayList 中不支持的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17323730/