2012-10-26 7 views
14

Kann ich Primitive in Scala verwenden?Wie kann ich Primitive in Scala verwenden?

Der Anwendungsfall dient zum Speichern von Milliarden von Ints, daher ist der Unterschied zwischen 4 Bytes (für einen int) und 16 Bytes (für einen Integer) wichtig.

+6

scala kompiliert zu Primitiven, wenn es möglich ist (Array [Int] => int [] usw.) – Arjan

+0

Wenn Sie buchstäblich Milliarden von Ints haben, werden Sie wahrscheinlich Speicherprobleme auftreten, auch wenn Sie Primitive verwenden, plus die Größe von Arrays ist auf der JVM begrenzt, indem ein int ref zu dem Element benötigt wird, dh ~ 2 Milliarden Elemente. Denken Sie daran, entweder Ihre Daten zu streamen oder stattdessen eine Datenbank zu verwenden. –

Antwort

14

Wenn Sie Scala wollen unboxed Primitiven speichern, könnten Sie Array[Int] verwenden, aber verzichten auf all kühle Scala Sammelmethode auf mich mit (weil es Boxen zwingen).

Wenn Sie nach unveränderlichen Sammlungen von Primitivtypen suchen, können Sie einen Blick auf Debox werfen, der spezielle Puffer, Sets und Maps bereitstellt. Das Projekt entwickelt sich noch, aber es ist sehr vielversprechend.

+0

Ich denke nicht, Debox Container unveränderlich aufrufen ist korrekt. Allerdings versucht Debox, Features von Scala mutable.Buffer, Map und Set (z. B. Autogrowing), mit guter Leistung und insbesondere ohne Boxen bereitzustellen. –

12

Sie können die Annotation @specialised verwenden, damit der Compiler spezialisierte Instanzen einer Klasse für Sie erstellen kann. Siehe this article.

class Container[@specialized(Int) T](value: T) { 
    def apply(): T = value 
} 
Verwandte Themen