Java链表删除对象方法[重复]
Posted
技术标签:
【中文标题】Java链表删除对象方法[重复]【英文标题】:Java Linked List remove object method [duplicate] 【发布时间】: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
循环使用迭代器遍历列表,并且在迭代列表时更改列表会使迭代器无效。
【参考方案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
对象而不是 int
s。
【讨论】:
【参考方案3】:我宁愿这样做:
l.removeAll(Arrays.asList(numbers));
【讨论】:
【参考方案4】:您需要调用remove(Object)
:调用remove(num)
与签名为remove(Object o)
的函数不匹配,其中函数参数是引用类型。相反,它与remove(int index)
匹配。
因此,调用remove(Integer.valueOf(num))
将起作用,因为它将传递一个引用类型。
【讨论】:
以上是关于Java链表删除对象方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记—82. 删除排序链表中的重复元素 II
LeetCode Java刷题笔记—83. 删除排序链表中的重复元素