【问题标题】:Java Linked List remove object method [duplicate]Java链表删除对象方法[重复]
【发布时间】:2014-01-04 03:53:19
【问题描述】:

如果元素存在于链表中,我想在迭代数字数组时删除它

for(int num : numbers)
{
   if(l.contains(num))
   {
      l.remove(num);
   }
}

但是,它试图删除索引 num 处的元素,而不是在链表中查找 num。

javadoc有这个方法

remove(Object o)
Removes the first occurrence of the specified element from this list, if it is present.

如何使用它?

【问题讨论】:

  • 使用l.remove(new Integer(num));
  • 另外,不要使用for each
  • 谢谢,它成功了。那么是不是因为如果我们使用原始类型,它会将它用作索引?所以我们把它包装成对象了吗?
  • l 是您的链接列表吗?你是怎么初始化的?
  • @user2133404 foreach 循环使用迭代器遍历列表,并且在迭代列表时更改列表会使迭代器无效。

标签: java linked-list


【解决方案1】:

你可以这样做

for(Integer num : numbers)
    l.remove(num); // remove if present

这避免了与 List.remove(int index) 如果你将它传递一个 int 和 List.remove(Object) 如果你将它传递一个像 Integer 这样的对象调用的混淆 em> 并避免在元素存在时扫描列表两次。

【讨论】:

  • @AJMansfield 有什么问题?
  • 哦,好的。感谢您的回复。
  • @user503413 实际上现在我想多了,这根本不是问题。
【解决方案2】:

你应该把它装在Integer 中,像这样:

l.remove(Integer.valueOf(num));

或迭代 Integer 对象而不是 ints。

【讨论】:

    【解决方案3】:

    我宁愿这样做:

    l.removeAll(Arrays.asList(numbers));
    

    【讨论】:

      【解决方案4】:

      您需要调用remove(Object):调用remove(num) 与签名为remove(Object o) 的函数不匹配,其中函数参数是引用类型。相反,它与remove(int index) 匹配。

      因此,调用remove(Integer.valueOf(num)) 将起作用,因为它将传递一个引用类型。

      【讨论】:

        猜你喜欢
        • 2017-08-02
        • 1970-01-01
        • 2021-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多