Différence entre size() et length() dans un java.util.BitSet

Différence entre size() et length() dans un java.util.BitSet - Java - Programmation

Marsh Posté le 07-09-2002 à 15:58:48    

Je suis pas sûr de comprendre la différence. Il y a une histoire de capacité utilisée, mais je vois pas très bien.

Reply

Marsh Posté le 07-09-2002 à 15:58:48   

Reply

Marsh Posté le 07-09-2002 à 16:15:57    

C'est assez méchant comme objet, je m'explique :
 
J'ai fait un petit programme de test
 

Code :
  1. import java.util.BitSet;
  2. public class BitSetTest {
  3. public static void main(String[] args) {
  4.  BitSet bits = new BitSet(8);
  5.  for (int i = 0; i < 8; i++) {
  6.   if (i % 2 == 0)
  7.    bits.clear(i);
  8.   else
  9.    bits.set(i);
  10.  }
  11.  System.out.println("BitSet " + bits);
  12.  System.out.println("length: " + bits.length() + ", size: " + bits.size());
  13. }
  14. }


 
La sortie est assez surprenante :
 

BitSet {1, 3, 5, 7}
length: 8, size: 64


 
Déjà, le 64 me porte à croire que la méthode size() ne doit pas avoir une très grande utilité, à moins qu'elle ne cache des informations que je n'ai pas sû déceler.
 
Quant à length(), c'est assez piège pour le noter : il renvoit l'index de plus haut "true" + 1, autrement dit, si le dernier bit est à false, il n'en est pas fait mention, bien que pour le programmeur ce false puisse avoir une utilité (c'est mon cas).
 
Voilà.

Reply

Marsh Posté le 07-09-2002 à 16:29:30    

Cherrytree a écrit a écrit :

Déjà, le 64 me porte à croire que la méthode size() ne doit pas avoir une très grande utilité, à moins qu'elle ne cache des informations que je n'ai pas sû déceler.


apparemment chaque bit est stocké dans un byte. donc length = nombre d'éléments (ici nb de bits), size = taille occupée par l'objet.

Reply

Marsh Posté le 07-09-2002 à 16:42:00    

ça serait pas plutot que size = poids du plus "grand" bit?
du genre le bit7 correspond à la valeur 64?


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 07-09-2002 à 17:05:53    

--greg-- a écrit a écrit :

ça serait pas plutot que size = poids du plus "grand" bit?
du genre le bit7 correspond à la valeur 64?



ça revient au même mais c'est ça.

Reply

Marsh Posté le 07-09-2002 à 17:10:59    

Par contre size, c'est plus dans l'esprit de ce que dit youdontcare. Car, si tu flippes quelques bits dans le BitSet, la méthode size renvoit quand même 64. C'est certainement lié à la construction de l'objet, mais il est surprenant de trouver une telle valeur, sachant que Java ne mise traditionnellement pas comme le C sur les sizeof(). On peut stocker quelle valeur entière dans un octet (byte pour les belges) ? 256 valeurs différentes... Mmmh, non, ce 64 me chiffonne.

Reply

Marsh Posté le 07-09-2002 à 23:58:28    

ben si t'as un bitset de length=7, size=64, quels que soit l'etat des bits nan?
au fait tu te sers de ça pourquoi?


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 08-09-2002 à 09:23:03    

--greg-- a écrit a écrit :

ben si t'as un bitset de length=7, size=64, quels que soit l'etat des bits nan?
au fait tu te sers de ça pourquoi?



Pour représenter les locus d'un chromosome dans un algorithme génétique. Size en effet ne varie pas suivant l'état des bits, length par contre dépend du plus haut bit à 1.


---------------
Le site de ma maman
Reply

Marsh Posté le 12-09-2002 à 13:49:49    

Si ça se trouve, la taille doit être un multiple de 64 bits (peut-être à cause d'histoires d'alignement des mots en mémoire ?). Tu peux faire ton test jusqu'à 65 pour vérifier ?

Reply

Marsh Posté le 12-09-2002 à 13:55:38    

Je vais voir ça.


---------------
Le site de ma maman
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed