gpt4 book ai didi

java - 如何删除列表元素

转载 作者:行者123 更新时间:2023-12-01 18:32:38 25 4
gpt4 key购买 nike

我正在尝试删除列表元素,但出现此异常

Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at apollo.exercises.ch08_collections.Ex4_RemoveOdd.removeOdd(Ex4_RemoveOdd.java:25)
at apollo.exercises.ch08_collections.Ex4_RemoveOdd.main(Ex4_RemoveOdd.java:15)

这是我的代码

public class Ex4_RemoveOdd {
removeOdd(Arrays.asList(1,2,3,5,8,13,21));
removeOdd(Arrays.asList(7,34,2,3,4,62,3));
public static void removeOdd(List<Integer> x){
for(int i=0;i<=x.size()-1;i++){
if (x.get(i)%2==0){
System.out.println(x.get(i));
}else{
x.remove(i);
}
}
}
}

所以我创建新类只是为了尝试删除元素

public static void main(String[] args) {
List<Integer> x = Arrays.asList(1,2,3,5,8,13,21);
x.remove(1);
}

但仍然有错误

Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at apollo.exercises.ch08_collections.Ex4_RemoveOdd.main(Ex4_RemoveOdd.java:14)

仅供引用:我尝试解决这个练习https://github.com/thecodepath/intro_java_exercises/blob/master/src/apollo/exercises/ch08_collections/Ex4_RemoveOdd.java

最佳答案

Arrays.asList 返回一个固定大小的列表。任何尝试修改其大小(通过添加或删除元素)的调用都会抛出此异常。

使用将集合作为参数的 ArrayList 构造函数。

removeOdd(new ArrayList<>(Arrays.asList(1,2,3,5,8,13,21)));

还如评论中所述,使用 List 的迭代器从中删除元素更安全(并且强烈推荐)。

目前,使用 for 循环方法,您将跳过要删除的元素。例如,当使用列表 [1,2,3,5,8,13,21] 调用方法时,第一次迭代将删除 1,因此所有元素都会在列表中移动一位。那么i的值为1,列表的大小为6list.get(1)将返回 3 而不是 2 等等。

最后你会得到[2, 5, 8, 21],这不是你想要的。

<小时/>如果您使用 ,您的代码可以简化为

public static void removeOdd(List<Integer> x){
x.removeIf(i -> i%2 != 0);
}

关于java - 如何删除列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23457361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com