【问题标题】:ArrayList remove method not working?ArrayList 删除方法不起作用?
【发布时间】:2016-08-30 09:53:58
【问题描述】:

这可能是重复的,但我看不到任何与此错误有关的问题,如果是,请致歉。

我正在尝试使用remove() 方法从我的ArrayList 中删除一个整数,但是它给了我java.lang.UnsupportedOperationException。根据我的理解,remove 方法应该采用int 或整数,或者来自ArrayList 的值,但是这些似乎不起作用并给出相同的错误。

我也尝试使用“深度”作为index,因为这是我要删除的index

这是我的代码:

import java.util.*;

public class EP{
public static List<Integer> items = Arrays.asList(12, 13, 48, 42, 38,     2827, 827, 828, 420);
public static void main(String[]args){
System.out.println("Exam List");
for(Integer i: items){
    System.out.println(i);
}
    Scanner scan = new Scanner(System.in);
System.out.println("Enter depth");
int depth = scan.nextInt();
System.out.println("Enter value");
int value = scan.nextInt();
System.out.println(mark(depth, value));
}

public static int  mark(int depth, int value){
int ret = -1; //This ensures -1 is returned if it cannot find it at the specified place
for(Integer i: items){
    if(items.get(depth) == (Integer)value){ //This assummes depth starts at 0
    ret = value;
    items.remove(items.get(depth)); // has UnsupportedOperationException
    }
    }
System.out.println("Updated Exam List");
for(Integer j: items){
    System.out.println(j);
}
return ret;
}
}

【问题讨论】:

  • 请格式化您的代码。这完全难以辨认。
  • Arrays.asList() 不返回 ArrayList。我希望您找到是否可以修改 Arrays.asList() 返回的列表实现。查看使用简单 for 循环进行迭代、使用增强型 for 循环进行迭代和使用 List 的迭代器进行迭代之间的区别。另请参阅何时可以在使用迭代器或增强的 for 循环进行迭代时修改列表,以及何时不能这样做。当您研究这些时,您将清楚您在代码中所做的所有事情以及您遇到的异常情况。在您的情况下,修改虽然迭代不是例外的原因,但仍在研究
  • 参见this 帖子,了解如何从Array 创建ArrayList
  • @BoristheSpider,我是新手,它确实是格式化的,但不知何故它像那样上传了。

标签: java arraylist methods integer int


【解决方案1】:

Arrays.asList 返回的List 实现不是java.util.ArrayList。这是在Arrays 类中定义的不同实现,它是固定大小的List。因此,您无法在该 List 中添加/删除元素。

您可以通过创建一个由 List 的元素初始化的新 java.util.ArrayList 来解决此问题:

public static List<Integer> items = new ArrayList<>(Arrays.asList(12, 13, 48, 42, 38, 2827, 827, 828, 420));

也就是说,使用增强的 for 循环从迭代 items 的循环中调用 items.remove 将不起作用(它将抛出 CuncurrentModificationException)。您可以改用传统的 for 循环(如果您想删除 Iterator 指向的当前元素,则可以使用显式的 Iterator,但似乎并非如此)。

【讨论】:

    猜你喜欢
    • 2014-02-18
    • 1970-01-01
    • 2018-12-22
    • 2013-06-03
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多