Frage

Ich möchte wissen, was die Speichernutzung von BitSet in Scala.For Beispiel, wenn ich tun:

  var bitArray:BitSet=new BitSet(10)
  bitArray.add(0)
  bitArray.add(2)
  bitArray.add(4)
  bitArray.add(6)
  bitArray.add(8)

Wie funktioniert das Vergleichen mit und Array mit den geraden Nummern 0,2,4,6,8?

Was ist eine Zahl in binären schreiben:

  var bitArray:BitSet=new BitSet(32)
  bitArray.add(5)
  bitArray.add(3)
  bitArray.add(2)
  bitArray.add(1)
  bitArray.add(0)

Wie funktioniert das 47 zur Nummer vergleichen?

Ich bin hier die Speichernutzung zu fragen. Aber als eine offene Frage, wenn Sie wissen, was sind die Vorteile / Nachteile oder Verwendungen von BitSet (WR zu anderen gängigen Datentypen).

Danke,

War es hilfreich?

Lösung

Sie können 2.8 hier bei der Umsetzung von BitSet in Scala aussehen: scala.collection.mutable.BitSet .

Es ist implementiert, basierend auf einer Reihe von Longs. Die Größe des Arrays hängt nur von der höchsten Zahl in ihm gespeichert. Teilen Sie die höchste Zahl gespeichert darin um 64, Aufrunden, und die Größe des Arrays haben. Jedes Element in dem Array verbraucht 8 Bytes.

Das bedeutet, dass sie durch die größte Anzahl 8 gespeicherten Dividieren, etwa die Größe in Bytes des BitSet ergibt. „Grob“ wegen der Speicherverwaltung virtueller Maschinen Gemeinkosten, da der Zeiger auf das Array muss auch etwas Speicher und da das Array selbst etwas Overhead hat.

Die Reihenfolge der Einführung oder die tatsächliche Anzahl von Elementen in der BitSet keinen Einfluss auf die Größe des zugewiesenen Speicher gespeichert haben.

Für die beiden Beispiele, die Sie geben, nur ein Langelement ist erforderlich, um die Zahlen zu speichern, mit 8 Byte Speicher, wie in beiden Beispielen die höchste Zahl kleiner ist als 64.

Ein Array von Ints, werden alle fünf Zahlen speichern, würde 5 * 4 Bytes = 20 Bytes verbrauchen zuzüglich Overhead. Zum Speichern von n Zahlen müssen Sie ungefähr n * 4 Bytes.

Sie sind also zu vergleichen (highestNumberStored / 8) Bytes gegen (countOfNumbersStored * 4) Bytes.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top