枚举列表删除问题

Bha*_*rat 0 java enums enumeration list

任何人都可以帮助我解决问题吗?

public static void main(String[] args) 
{
    List<TestEnum> list1 = new ArrayList<TestEnum>();
    list1.add(TestEnum.ONE);
    list1.add(TestEnum.TWO);
    list1.add(TestEnum.THREE);

    System.out.println(list1);
    System.out.println(list1.remove(TestEnum.TWO));
    System.out.println(list1);

    System.out.println("-----------------------");

    TestEnum[] xx = new TestEnum[]{TestEnum.ONE, TestEnum.TWO, TestEnum.THREE};
    List<TestEnum> list2 = Arrays.asList(xx);

    System.out.println(list2);
    System.out.println(list2.remove(TestEnum.TWO));
    System.out.println(list2);
}
Run Code Online (Sandbox Code Playgroud)

以下是结果 -

[ONE, TWO, THREE]
true
[ONE, THREE]
-----------------------
[ONE, TWO, THREE]
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(Unknown Source)
at java.util.AbstractList$Itr.remove(Unknown Source)
at java.util.AbstractCollection.remove(Unknown Source)
at Test.main(Test.java:24)
Run Code Online (Sandbox Code Playgroud)

请帮助 - 为什么会这样,我还检查了哈希码?

Ale*_*you 13

返回的列表Arrays.asList()具有固定大小 - 它所支持的数组的大小.它不支持,可能会导致尺寸改变操作:add(),addAll(),remove(),removeAll(),retainAll(),clear().

您可以使用以下惯用法来创建可修改大小的列表:

List<TestEnum> = new ArrayList<>(Arrays.asList(xx));
Run Code Online (Sandbox Code Playgroud)

这将创建一个普通的ArrayList由从结果复制的元素初始化Arrays.asList().