Java,如何删除ArrayList中的整数项

Java,如何删除ArrayList中的整数项,java,Java,假设我有这样一个ArrayList: ArrayList<Integer> list = new ArrayList<Integer>(); 如果我想删除编号2,我想删除 list.remove(2); 然后将删除第5号,如何删除第2号?假设我不知道编号2的索引 list.remove(0); 0表示索引0处的元素 您已经编写了列表。删除(2)这意味着删除索引2处的元素(即第三位的元素,即5,因为ArrayList从索引0,1,2开始)试试这个 list.remov

假设我有这样一个ArrayList:

ArrayList<Integer> list = new ArrayList<Integer>();
如果我想删除编号2,我想删除

list.remove(2);
然后将删除第5号
,如何删除第2号
?假设我不知道编号2的索引

list.remove(0);
0表示索引0处的元素

您已经编写了
列表。删除(2)
这意味着删除索引2处的元素(即第三位的元素,即5,因为
ArrayList
从索引0,1,2开始)

试试这个

list.removeAll(Arrays.asList(2));
它将删除值为2的所有元素

你也可以用这个

list.remove(Integer.valueOf(2));
但它只会删除2的第一次出现


list.remove(2)
不起作用,因为它与
list.remove(int i)
匹配,它删除具有指定索引的元素没有明确的方法来查找特定的列表元素,然后将其删除。您必须首先使用
indexOf
方法找到它:

int index = list.indexOf(element); // for your example element would be 2
list.remove(index);

请注意,
indexOf
返回给定对象第一次出现时的索引,因此,如果要多次删除列表中的项目,则必须进行相应调整。

有两种版本的
remove()
方法:

int index = list.indexOf(element); // for your example element would be 2
list.remove(index);
  • 对象
    移除,然后
  • 这需要一个
    索引才能删除
    
对于
ArrayList
,删除像
2
这样的整数值作为索引,因为
remove(int)
与此完全匹配。它不会将
2
框到
Integer
,并将其加宽

一种解决方法是显式获取
整数
对象,在这种情况下,加宽比取消装箱更可取:

list.remove(Integer.valueOf(2));

我想这就是你想要的:

试试这个:

list.remove(list.indexOf(2));
试试看

  • 删除(整型索引)

    删除此列表中指定位置的元素(可选) 操作)。将任何后续元素向左移动(减去 一个来自他们的指数)。返回从中删除的元素 名单

  • 移除(对象o)

    从中删除指定元素的第一个匹配项 列表(如果有)。如果列表不包含该元素,则 没有变化。更正式地说,删除具有最小值的元素 索引i使得(
    o==null?get(i)==null:o.equals(get(i))
    )(如果 这样一个元素是存在的)。如果此列表包含 指定的元素(或等效元素,如果此列表因此更改 电话号码)


  • 简单地说,若您使用这样的方法,它将删除索引2处的元素

    你的数组列表:2,3,5,7

    列表。删除(2)

    产出:2,5,7

    如果您使用这样的方法,它将删除值为2的元素

    你的数组列表:2,3,5,7

    list.remove(Integer.valueOf(2))

    产出:3,5,7

    希望它能帮助…

    而不是:

    list.remove(Integer.valueOf(2));
    
    当然,您可以使用:

    list.remove((Integer) 2);
    

    这将强制转换为整数对象而不是原语,然后按对象而不是按Arraylist索引执行
    remove()
    调用
    list.remove(int)
    方法,但需要调用
    list.remove(object)
    方法

    有几种方法可以做到这一点:

  • list.remove(Integer.valueOf(2));//删除第一次出现的2
  • list.remove(list.indexOf(2));//同时删除第一次出现的2
  • list.removeAll(Arrays.asList(2));//删除所有出现的2
  • 最简单的方法是:

    list.remove((Integer)5);
    

    没有不必要的对象创建,只是将索引强制转换为整数。奖励:最简单的语法。

    您应该更喜欢
    Integer.valueOf
    ,而不是构造函数,因为它使用内部缓存来防止不必要的对象创建。可能重复,所以只要对象是整数而不是int,它就会查找对象,对吗?例如-public void findById(Integer id){Object item=array.get(id);}将返回值,但位置不正确?Hi:),此答案已被回答。如果你有什么要补充的,请把它也包括进去,否则就考虑删除这个。
    list.remove((Integer) 2);
    
    list.remove((Integer)5);