Java.ArrayList。方法删除()

Posted

技术标签:

【中文标题】Java.ArrayList。方法删除()【英文标题】:Java.ArrayList. method remove() 【发布时间】:2011-05-21 22:03:48 【问题描述】:

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 行参数 Integer - 为什么我们没有异常?

    第 2 行 - 参数字节 - 它不是 int 也不是 Object,为什么又不是 Exception?

【问题讨论】:

所以,如果我对第 1 行的理解正确,我们会遇到这种情况:在我们的列表中,我们有 Long,所以当我们尝试运行 remove 方法时,我们有:If(Integer.equals(Long)) 返回false,我们的列表未修改。 和下一个。字节 -> 整数。这是正确的。但如果我这样做:long b =4654654654654654654L; long to int - 不可能。 【参考方案1】:

    remove(..) 方法不是通用的。它接受任何对象并且不检查其类。为了删除元素,它应该满足的条件是 equals(..) 方法在与集合中的元素进行比较时返回 true。元素 33 没有被移除,因为如果另一个对象不是 instanceof LongLong.equals(..) 返回 false

    byte 被解释为索引。

【讨论】:

实际上问题第 2 部分的正确答案是 Java 将 byte 原语自动装箱为 java.lang.Byte 对象并调用 ArrayList.remove(Object)。 57:aload_1 58:iload_2 59:invokevirtual #15; //方法java/util/ArrayList.remove:(I)Ljava/lang/Object; 这是我最初的回答。但事实并非如此。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

1) 你传递了一个不在列表中的对象。所以什么都没有发生。

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

【讨论】:

#1 错误:remove(Object) 被调用,如果元素不是列表的一部分,则不会执行任何操作。如果索引超出范围,remove(int) 会抛出异常。 还是错了。 Nothing happens 不太对,它返回 false。 好的。但列表没有任何反应。这就是问题所在。【参考方案4】:

Java 内置了自动装箱功能,可以节省您对各种数字表示进行类型转换的时间。没有错误,因为 Java 可以识别您的意思并为您转换。

【讨论】:

【参考方案5】:
    Integer 正在转换为 Object,因此不会引发异常。 我认为字节正在转换为 int 并被视为索引 0,因此删除了第一个值。

【讨论】:

【参考方案6】:

看看javadocs。 ArrayList.remove 接受一个对象,而一个整数是一个对象。

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

字节有效,因为我相信它要么是 autoboxed 到 Object 中,要么它被向上转换为 int 作为索引。

【讨论】:

以上是关于Java.ArrayList。方法删除()的主要内容,如果未能解决你的问题,请参考以下文章

java ArrayList迭代过程中删除

删除 Java ArrayList 中的重复对象会导致并发修改错误 [重复]

JAVA ArrayList集合基础

java ArrayList数组中如何插入一个元素

如何从java arraylist中删除重复的对象[重复]

Java——ArrayList用法详解