期待 ConcurrentModificationException 但得到 UnsupportedException
Expecting ConcurrentModificationException but getting UnsupportedException
我有一份动物清单。我的目标是只从列表中删除狗。怎么做?
我有以下相同的代码
Dog d1= new Dog("Dog 1");
Dog d2= new Dog("Dog 2");
Dog d3= new Dog("Dog 3");
Cat c1= new Cat("Cat 1");
Cat c2= new Cat("Cat 2");
List<Animal> al= Arrays.asList(d1,d2,c1,c2,d3);
for(Animal eachlist : al)
{
if(eachlist instanceof Dog)
{
al.remove(eachlist);
}
System.out.println(eachlist.toString());
}
积分
1.I 我期待 al.remove() 抛出 ConcurrentModificationException 但它抛出 UnsoppertedException。为什么?
2. 如何真正从列表中删除所有的狗
这是使用Arrays.asList
造成的。这使用了一个有限的 List 实现,它重用了您指定为参数的数组。既然数组不能缩小,这个列表实现也不能。
要获得您期望的异常,请尝试使用不同的 List 实现,例如 ArrayList,例如将您的列表传递给 ArrayList 的构造函数:
List<Animal> al = new ArrayList<>(Arrays.asList(d1,d2,c1,c2,d3));
然后删除狗的所有实例:
al.removeIf(a -> a instanceof Dog);
我有一份动物清单。我的目标是只从列表中删除狗。怎么做?
我有以下相同的代码
Dog d1= new Dog("Dog 1");
Dog d2= new Dog("Dog 2");
Dog d3= new Dog("Dog 3");
Cat c1= new Cat("Cat 1");
Cat c2= new Cat("Cat 2");
List<Animal> al= Arrays.asList(d1,d2,c1,c2,d3);
for(Animal eachlist : al)
{
if(eachlist instanceof Dog)
{
al.remove(eachlist);
}
System.out.println(eachlist.toString());
}
积分
1.I 我期待 al.remove() 抛出 ConcurrentModificationException 但它抛出 UnsoppertedException。为什么? 2. 如何真正从列表中删除所有的狗
这是使用Arrays.asList
造成的。这使用了一个有限的 List 实现,它重用了您指定为参数的数组。既然数组不能缩小,这个列表实现也不能。
要获得您期望的异常,请尝试使用不同的 List 实现,例如 ArrayList,例如将您的列表传递给 ArrayList 的构造函数:
List<Animal> al = new ArrayList<>(Arrays.asList(d1,d2,c1,c2,d3));
然后删除狗的所有实例:
al.removeIf(a -> a instanceof Dog);