Java.ArrayList。方法remove()

时间:2010-12-07 22:58:57

标签: java arraylist

ArrayList有metod 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. 整数 - 为什么我们没有异常?

  2. 第2行 - 参数字节 - 它不是int而不是Object,为什么不再出现异常?

6 个答案:

答案 0 :(得分:5)

  1. remove(..)方法不是通用的。它接受任何对象,不检查其类。为了删除元素,应该注意的条件是equals(..)方法,与集合中的元素相比,返回true。未删除元素33,因为如果另一个对象不是Long.equals(..)

    ,则false会返回instanceof Long
  2. byte被解释为索引。

答案 1 :(得分:2)

因为这两个都被转换为正确的类型。在第一个中,它是remove(Object o),其中o是Integer(33)。但是它并没有在你的arraylist中找到那个对象,所以它根据定义返回false:

  

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

第二个可能会被转换为int,所以你要删除第一个索引。

答案 2 :(得分:1)

1)传递一个不在列表中的对象。没有任何反应。

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

答案 3 :(得分:1)

Java内置了自动装箱功能,可为您节省类型化各种数字表示的时间。没有错误,因为Java会找出你的意思并为你转换它。

答案 4 :(得分:1)

  1. 整数正在转换为Object,因此不会抛出异常。
  2. 我认为字节正被转换为int并被视为索引0,因此删除了第一个值。

答案 5 :(得分:0)

看看javadocs。 ArrayList.remove采用Object,Integer是Object。

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

该字节有效,因为我认为它是对象的autoboxed,或者它是作为索引向上转换为int。