Java 枚举列表删除问题
有人能帮我解决这个问题吗Java 枚举列表删除问题,java,list,enums,enumeration,Java,List,Enums,Enumeration,有人能帮我解决这个问题吗 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); Syst
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);
}
请帮助-为什么会发生这种情况,我还检查了hashcode?数组返回的列表。asList()具有固定大小--它所支持的数组的大小。它不支持可能导致大小更改的操作:
add()
,addAll()
,remove()
,removeAll()
,retainal()
,clear()
您可以使用以下习惯用法创建可修改大小的列表:
List<TestEnum> = new ArrayList<>(Arrays.asList(xx));
List=newarraylist(Arrays.asList(xx));
这将创建一个普通的
数组列表
,该列表由从数组的结果中复制的元素初始化。asList()
由数组返回。asList()
具有固定大小--它所支持的数组的大小。它不支持可能导致大小更改的操作:add()
,addAll()
,remove()
,removeAll()
,retainal()
,clear()
您可以使用以下习惯用法创建可修改大小的列表:
List<TestEnum> = new ArrayList<>(Arrays.asList(xx));
List=newarraylist(Arrays.asList(xx));
这将创建一个普通的
ArrayList
,该列表由从数组的结果中复制的元素初始化。asList()
数组。asList
返回不可变列表的实例,在该实例上无法调用remove
。你必须把它包装在新的列表中
newarraylist(Arrays.asList(xx))
Arrays.asList
返回不可变列表的实例,在该实例上无法调用remove
。你必须把它包装在新的列表中
newarraylist(Arrays.asList(xx))
Arrays.asList
返回一个特殊的ArrayList
对象,该对象不支持任何修改其大小的操作
从该方法的文档中:
此方法还提供了创建固定大小列表的方便方法
初始化为包含多个元素
Arrays.asList
返回一个特殊的ArrayList
对象,该对象不支持任何修改其大小的操作
从该方法的文档中:
此方法还提供了创建固定大小列表的方便方法
初始化为包含多个元素
如果查看
Arrays
类的asList
方法,您将看到返回一个newarraylist()
。但是实例化的对象在Arrays
类中有另一个私有ArrayList
类。这个类像普通的ArrayList
一样扩展了AbstractList
,但它不重写remove
方法。这是remove
方法的原始实现
/**
* {@inheritDoc}
*
* <p>This implementation always throws an
* {@code UnsupportedOperationException}.
*
* @throws UnsupportedOperationException {@inheritDoc}
* @throws IndexOutOfBoundsException {@inheritDoc}
*/
public E remove(int index) {
throw new UnsupportedOperationException();
}
/**
*{@inheritardoc}
*
*此实现始终抛出
*{@code UnsupportedOperationException}。
*
*@throws UnsupportedOperationException{@inheritardoc}
*@throws IndexOutOfBoundsException{@inheritDoc}
*/
公共E删除(int索引){
抛出新的UnsupportedOperationException();
}
如果查看Arrays
类的方法asList
,您将看到返回一个newarraylist()
。但是实例化的对象在Arrays
类中有另一个私有ArrayList
类。这个类像普通的ArrayList
一样扩展了AbstractList
,但它不重写remove
方法。这是remove
方法的原始实现
/**
* {@inheritDoc}
*
* <p>This implementation always throws an
* {@code UnsupportedOperationException}.
*
* @throws UnsupportedOperationException {@inheritDoc}
* @throws IndexOutOfBoundsException {@inheritDoc}
*/
public E remove(int index) {
throw new UnsupportedOperationException();
}
/**
*{@inheritardoc}
*
*此实现始终抛出
*{@code UnsupportedOperationException}。
*
*@throws UnsupportedOperationException{@inheritardoc}
*@throws IndexOutOfBoundsException{@inheritDoc}
*/
公共E删除(int索引){
抛出新的UnsupportedOperationException();
}
数组返回的列表。asList()
不支持。remove()
数组返回的列表的可能副本。asList()
不支持。remove()
它的可能副本实际上支持修改方法,但是只有那些不改变大小的。它实际上支持修改方法,但只支持那些不改变大小的方法。数组。asList()
不是不可变的,因为你可以调用。set()
数组来修改它。asList()
不是不可变的,因为你可以调用。set()