2017-06-11 6 views
1

remove(Object o)のメソッド(of List interface)removeFirstOccurrence(Object o)の方法(of LinkedList class)のコレクションのAPIには違いがありますか? 私はどちらも同じことを見ることができます。つまり、リスト内の最初のオカレンスを削除します。removeFirstOccurrenceとremoveの違い

答えて

0

(リスト インターフェースの)削除(オブジェクトo)メソッドとremoveFirstOccurrenceと(オブジェクトo)法の間の任意の差はあります(LinkedList クラスの)コレクションフレームワークで?

これらは2つの異なる方法であり、2つの異なるインターフェイスに由来します。
最初のもの(remove(Object o))はjava.util.Collectionインターフェイスで定義されています。
他方(removeFirstOccurrence(Object o)java.util.Dequeインタフェースで定義されて

を最初のもの(remove(Object o))はCollectionインタフェースではなく、一般的な契約を結んでいる:。

このから指定された要素の単一のインスタンスを削除しますコレクションが存在する場合は コレクション...

しかしCollectionは、より具体的な契約有し延びListインタフェース:それは現在(任意のオペレーション)である場合、このリストの指定された要素の最初の発生を削除し

を....

一つ一方、Dequeインタフェースで定義されremoveFirstOccurrence(Object o)は、同様の契約を指定します。

は...


この両端キューから指定された要素の最初の発生を削除これはLinkedList直接ListDequeの両方を実装していることが分かります。
List.remove(Object o)Deque.removeFirstOccurrence(Object o)は同様の契約を指定しているため、LinkedListクラスのこれらの2つのメソッドの動作と実装が同じであることは実際には驚くことではありません。

0

んが、私はどんな違いがあるの両方の正式要素とreturn.Moreの最初の発生を削除しないと思う、最低のインデックスi

のJava API ArrayListの削除を持つ要素を削除しません。

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; 
0

はいとノー

removeFirstOccurrenceとコールは削除ありませんので

public boolean removeFirstOccurrence(Object arg0) { 
     return this.remove(arg0); 
    } 

はいremoveFirstOccurrenceとはLinkedListはからではなく、例えば、他のリストから呼び出すことができますので、 ArrayList

1

いいえ、違いがありませんです。あなたがremoveFirstOccurrence()のソースを見れば

、あなたが表示されます:

public boolean removeFirstOccurrence(Object o) { 
    return remove(o); 
} 

LinkedListは両方それぞれのjavadocの与えられた理由:によって指定

remove(Object o)
removeインタフェースでCollection<E>
指定:remove in interface Deque<E>
指定:界面におけるremoveList<E>

removeFirstOccurrence(Object o)
によって指定 :インタフェースにremoveFirstOccurrenceDeque<E>