2017-08-27 4 views
2

Hallo, also ich weiß, dass Scala mit mehreren Arten von Karten einschließlich HashMap, TreeMap (die ich glaube, ist ein Trie), BitMap und ListMap kommt.Welche Karte verwendet scala?

Also, wenn Sie eine Karte in scala mit Ihnen grundlegenden Faktor der Karte (1 -> 2, 2 -> 3) erstellen, welche Implementierung Scala verwendet zu verwenden? Ich nehme an, dass die Skala einige Regeln für die Auswahl der oben aufgeführten Kartentypen enthält, aber welche Regeln gibt es? Um einen Hash zu verwenden, muss irgendwo eine Hashing-Strategie definiert werden. Oder setzt scala einfach auf eine der Implementierungen?

Dank

+0

Als Java-Java verwendet Scala '.hashCode' und/ordering. Bitte werfen Sie zuerst einen Blick auf die [Dokumentation] (https://docs.scala-lang.org/overviews/collections/overview.html) – cchantep

Antwort

1

der documentation on HashTries Nach (blättern Sie zu Abschnitt HahsTries) die Implementierung von Standard-Scala verwendet HashMap ist.

Scala, kehrt jedoch die so genannten spezialisierten Darstellungen von HashMap Umsetzung in einigen Fällen wie Maps, die enthält (und 4-Elemente, einschließlich, ist dies auch in der Dokumentation Link)

Sie dies überprüfen können, indem Sie:

val map: Map[Int, Int] = Map(1 -> 2, 2 -> 3, 3 -> 4, 4 -> 5) 
    val map2: Map[Int, Int] = Map(List(1 -> 2, 2 -> 3, 3 -> 4, 4 -> 5, 5 -> 6): _*) 

    println(map.getClass.getName) 
    println(map2.getClass.getName) 

und der Ausgang ist:

scala.collection.immutable.Map$Map4 
scala.collection.immutable.HashMap$HashTrieMap 

Wenn Sie und IDE, die Code dekompilieren können Sie sehen, dass die Art und Weise Schlüssel Mana sind ged in Instanzen von Map1, Map2, Map3 und Map4 ist durch Gleichheit, weil intern diese Sammlungen durch eine Sequenz (nicht eine Scala Seq) von Tupeln dargestellt wird.

Die HashMap-Standardimplementierung verwendet die Hashwerte der Schlüssel und die Details sind in dem Link, den ich gepostet habe.