繁体   English   中英

Java.ArrayList。 方法remove()

[英]Java.ArrayList. method remove()

ArrayList具有方法remove(int index)remove(Object o) ,所以

我尝试运行以下代码:public static void main(String args []){

    ArrayList<Long>ar=new ArrayList<Long>();

    ar.add(11L);
    ar.add(22L);
    ar.add(33L);

    ar.remove(new Integer(33)); // 1

    byte b =0;
    ar.remove(b);  //2

    for(Iterator i=ar.iterator(); i.hasNext();)
    {
        System.out.println(i.next());

    }

}

结果我有:

22
33

我的问题:

  1. 第1行中的参数Integer-为什么我们没有异常?

  2. 第2行-paramenet字节-它不是int而不是Object,为什么不再次出现Exception?

  1. remove(..)方法不是通用的。 它接受任何对象,并且不检查其类。 与集合中的元素相比, equals(..)方法应返回true才能删除元素。 没有删除元素33,因为Long.equals(..)如果另一个对象不是instanceof Long则返回false

  2. byte被解释为索引。

因为这两个都转换为正确的类型。 在第一个中,它是remove(Object o),其中o是Integer(33)。 但是它在您的数组列表中找不到该对象,因此根据定义它返回false:

返回:如果此列表包含指定的元素,则返回true。

第二个可能被转换为一个int,因此您要删除第一个索引。

1)您传递的对象不在列表中。 所以什么也没发生。

2)它不是传递的对象,而是索引(0)。 因此,删除了arraylist中的第一个元素。

Java内置了自动装箱功能,可节省您进行各种数字表示形式转换的时间。 没错,因为Java弄清楚了您的意思并将其转换为您。

  1. 整数正在转换为对象,因此不会引发异常。
  2. 我认为该字节将被转换为int并被视为索引0,从而删除了第一个值。

看看javadocs。 ArrayList.remove需要一个对象,而整数是一个对象。

[更新]忘记回答第二个问题。

该字节起作用是因为我相信它要么自动装箱成一个对象,要么被上载到一个int作为索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM