Domanda

Vorrei sapere qual è l'utilizzo della memoria di BitSet in Scala.For esempio, se faccio:

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

In che modo che mettono a confronto con e vettore contenente i numeri pari 0,2,4,6,8?

Che a scrivere un numero in binario:

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

Come funziona che confrontare il numero 47?

sto chiedendo qui di utilizzo della memoria. Ma, come una domanda più aperta, se si sa, quali sono i vantaggi / svantaggi o usi di BitSet (WR ad altri tipi di dati comuni).

Grazie,

È stato utile?

Soluzione

Si può guardare la realizzazione di BitSet in Scala 2.8 qui: scala.collection.mutable.BitSet .

Si è implementato sulla base di una matrice di Longs. La dimensione della matrice dipende solo il maggior numero memorizzato in esso. Dividere il maggior numero memorizzato in essa 64, arrotondamenti, e si ha la dimensione della matrice. Ciascun elemento della matrice consuma 8 byte.

Ciò significa che dividendo per 8 il maggior numero memorizzato in esso, rese approssimativamente la dimensione in byte del BitSet. "Circa" a causa dei costi generali di gestione della memoria della macchina virtuale, poiché il puntatore alla matrice Occorre anche una certa memoria e perché la matrice stessa ha un certo overhead.

L'ordine di inserimento o il numero effettivo di elementi memorizzati nel BitSet hanno alcuna influenza sulla dimensione della memoria allocata.

Per i due esempi che si danno, solo un lungo elemento è necessario per memorizzare i numeri, utilizzando 8 byte di memoria, come in entrambi gli esempi il numero più alto è inferiore a 64.

Un array di int, magazzinaggio di cinque numeri, consumerebbe 5 * 4 byte = 20 byte più generali. Per la memorizzazione n numeri che avete bisogno di circa n * 4 byte.

Quindi, si sta confrontando (highestNumberStored / 8) byte contro (countOfNumbersStored * 4) byte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top