java - ArrayList 中不支持的异常

标签 java collections

我正在实现一个程序来从 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/

相关文章:

java - 如何在 hibernate hbm 文件中映射 boolean 值

java - 可执行 jar 无法找到或加载主类

java - 哈希表插入

java - Collection<E>&Queue<E>&BlockingQueue<E> 接口(interface)中的 add(E e) 方法

java - 如何将父类(super class)型列表转换为子类型列表?

java - JFrame 调用多个并发线程来更新调用者 JFrame 中的 JProgressBar

java - 文本字段中没有显示任何内容

ruby-on-rails - rails : rendering collections as tr with a table around it?

java - 使用 Java lambda 或流将 POJO 列表转换为其 ID 列表

java - Java 的集合接口(interface)和类层次结构做得不好吗?