集合api中的remove(Object o)
方法(of List interface)
方法removeFirstOccurrence(Object o)
和(of LinkedList class)
方法:vs
'A
之间是否有任何区别?
我可以看到两者都是一样的,即删除列表中第一次出现的对象。
答案 0 :(得分:1)
不,没有区别。
如果您查看removeFirstOccurrence()
的来源,您会看到:
public boolean removeFirstOccurrence(Object o) {
return remove(o);
}
LinkedList
两者的原因在每个的javadoc中给出:
remove(Object o)
在Collection<E>
接口中指定为:remove
在Deque<E>
接口中指定为:remove
指定人:List<E>
remove
removeFirstOccurrence(Object o)
指定人:Deque<E>
removeFirstOccurrence
答案 1 :(得分:0)
不,我认为没有任何区别是删除第一次出现的元素并返回。更正式地,删除索引最低的元素i
Java API ArrayList remove。
public boolean remove(Object o) {
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
fastRemove(index);
return true;
}
} else {
for (int index = 0; index < size; index++)
if (o.equals(elementData[index])) {
fastRemove(index);
return true;
}
}
return false;
}
LinkedList removeFirstOccurrence
if (o == null) {
for (Node<E> x = first; x != null; x = x.next) {
if (x.item == null) {
unlink(x);
return true;
}
}
} else {
for (Node<E> x = first; x != null; x = x.next) {
if (o.equals(x.item)) {
unlink(x);
return true;
}
}
}
return false;
答案 2 :(得分:0)
remove(Object o)方法(List。)之间是否有任何区别 接口)和removeFirstOccurrence(Object o)方法(LinkedList class)在集合框架中?
这是两种不同的方法,来自两个不同的界面
第一个(remove(Object o)
)在java.util.Collection
界面中定义
另一个(removeFirstOccurrence(Object o)
在java.util.Deque
界面中定义。
第一个(remove(Object o)
)在Collection
界面中有一个相当普遍的契约:
从中删除指定元素的单个实例 集合,如果它存在...
但扩展List
的{{1}}接口有更具体的合同:
从此列表中删除第一次出现的指定元素, 如果它存在(可选操作)....
另一方面,Collection
接口中定义的removeFirstOccurrence(Object o)
指定了类似的合同:
从此双端队列中删除第一次出现的指定元素...
事实证明Deque
直接实现LinkedList
和List
。
由于Deque
和List.remove(Object o)
指定了类似的契约,因此Deque.removeFirstOccurrence(Object o)
类中这两种方法的行为和实现是相同的并不奇怪。