我想删除元素,如果它在一个链表中存在,同时迭代一个数字数组
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.
如何使用它?
答案 0 :(得分:5)
你可以这样做
for(Integer num : numbers)
l.remove(num); // remove if present
如果你传递一个int 和List.remove(Object),如果你传递一个像Integer这样的对象,这就避免了与List.remove(int index)的混淆。如果元素存在,则避免扫描列表两次。
答案 1 :(得分:1)
你应该像Integer
一样将它装箱:
l.remove(Integer.valueOf(num));
或迭代Integer
个对象而不是int
s。
答案 2 :(得分:1)
我只想这样做:
l.removeAll(Arrays.asList(numbers));
答案 3 :(得分:0)
您需要调用remove(Object)
:remove(num)
的调用与签名remove(Object o)
的函数不匹配,其中函数参数是引用类型。相反,它与remove(int index)
匹配。
因此,调用remove(Integer.valueOf(num))
将起作用,因为它将传递引用类型。