2017-06-11 2 views
1

Gibt es einen Unterschied zwischen den remove(Object o) Methode (of List interface) und removeFirstOccurrence(Object o) Methode (of LinkedList class) in den Sammlungen api? Ich konnte sehen, dass beide das gleiche tut, d. H. Das erste Vorkommen des Objekts in der Liste entfernen. KeineUnterschied zwischen removeFirstOccurrence und entfernen

Antwort

0

Gibt es einen Unterschied zwischen remove (Object o) -Methode (von List Schnittstelle) und removeFirstOccurrence (Object o) Verfahren (von LinkedList Klasse) in Sammlungen Rahmen?

Dies sind zwei verschiedene Methoden, die von zwei verschiedenen Schnittstellen kommen.
Die erste (remove(Object o)) ist in der java.util.Collection Schnittstelle definiert.
der andere (removeFirstOccurrence(Object o) ist in der java.util.Deque Schnittstelle definiert

Die erste (remove(Object o)) einen Vertrag eher allgemein in der Collection Schnittstelle.

aus Dies entfernt eine einzelne Instanz des angegebenen Elements Sammlung, wenn es vorhanden ist ...

Aber die List Schnittstelle, die Collection hat eine spezifischere Vertrag verlängert:

Entfernt das erste Vorkommen des angegebenen Elements aus dieser Liste, falls vorhanden (optional Betrieb) ist ....

einer der anderen Seite, die removeFirstOccurrence(Object o) in der Deque Schnittstelle definiert gibt einen ähnlichen Auftrag:

Entfernt das erste Vorkommen des angegebenen Elements aus dieser Deque ...


Es stellt sich heraus, dass die LinkedList implementiert sowohl direkt List und Deque.
Und wie List.remove(Object o) und Deque.removeFirstOccurrence(Object o) einen ähnlichen Vertrag angeben, ist es wirklich nicht überraschend, dass das Verhalten und die Implementierung dieser beiden Methoden in der LinkedList Klasse gleich sein.

0

Ich glaube nicht, ein Unterschied gibt es sowohl entfernen Sie das erste Vorkommen des Elements und return.More formal, entfernt das Element mit dem niedrigsten Index i

Java API Arraylist entfernen.

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

Ja und Nein

Nein, weil removeFirstOccurrence Anrufe entfernen

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

Ja, weil removeFirstOccurrence kann nur von LinkedList und nicht aus anderen Liste zum Beispiel genannt werden ArrayList

1

Nein, es gibt keinen Unterschied.

Wenn Sie an der Quelle von removeFirstOccurrence() anschauen, werden Sie sehen:

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

Der Grund LinkedList hat sowohl in der javadoc jedes gegeben:

remove(Object o)
definiert durch: remove in Schnittstelle Collection<E>
Angegeben von: remove in Schnittstelle Deque<E>
Angegeben von: remove in Schnittstelle List<E>

removeFirstOccurrence(Object o)
definiert durch: removeFirstOccurrence in Schnittstelle Deque<E>

Verwandte Themen