Warum sind Puffer- und Listenobjekte gleich (auch wenn sie aus verschiedenen Klassen stammen)?

7
%Vor%

Ich habe mich gefragt, warum das Buffer und List-Objekt mit einem Ergebnis von True verglichen werden kann?

Ich dachte immer, da sie aus verschiedenen Klassen stammen, haben sie um falsch zu sein, wenn sie verglichen werden. Kann mir jemand erklären, warum es so umgesetzt wird?

    
John Threepwood 20.06.2012, 19:14
quelle

2 Antworten

17

Aus Ссылка

  

Die Sammlungsbibliotheken haben einen einheitlichen Ansatz für Gleichheit und Hashing. Die Idee besteht darin, Sammlungen in Sätze, Karten und Sequenzen zu unterteilen. Sammlungen in verschiedenen Kategorien sind immer ungleich. Zum Beispiel ist Set (1, 2, 3) ungleich List (1, 2, 3), obwohl sie die gleichen Elemente enthalten. Auf der anderen Seite sind Sammlungen innerhalb der gleichen Kategorie genau dann gleich, wenn sie dieselben Elemente haben (für Folgen: dieselben Elemente in der gleichen Reihenfolge). Beispiel: List (1, 2, 3) == Vektor (1, 2, 3) und HashSet (1, 2) == Treeset (2, 1).

     

Für die Gleichheitsüberprüfung spielt es keine Rolle, ob eine Sammlung änderbar oder unveränderbar ist. (...)

Es liegt also daran, dass scala.collection.mutable.Buffer und List zur gleichen Kategorie (Sequenz) gehören und die Gleichheit dann mit gleichen Elementen definiert ist.

    
Ixx 20.06.2012, 19:23
quelle
3

List und Buffer sind beide scala.collection.Seq . Sie haben möglicherweise duplizierte Elemente, die aufgezählt werden können (dh erstes Element, zweites Element usw.).

Die Tatsache, dass eine List und die andere Buffer ist, ist nur ein Implementierungsdetail.

Eine bessere Frage wäre, warum ein scala.collection.immutable.Seq und ein scala.collection.mutable.Seq gleich sein können, und die Antwort ist, dass die Veränderlichkeit in Bezug auf den Vergleich nicht relevant ist.

    
Daniel C. Sobral 20.06.2012 19:36
quelle

Tags und Links