On cherche à écrire une méthode newCompactSet qui renvoie un nouvel ensemble d'élements vide par défaut.
L'idée est d'utiliser une série de bits (la classe java.util.BitSet) pour implanter cet ensemble.
Si on ajoute un élement à cet ensemble, l'idée est de demander à la table (HiddenTable) un index
puis d'allumer le bit correspondant à cet index dans la série de bits de l'ensemble.
Voici un exemple d'exécution en pseudo code
table = créer une HiddenTable
set1 = sur une table, créer un ensemble
set2 = sur une table, créer un ensemble
sur set1, ajouter l'élément "foo" // "foo" est ajouté en position 0 de la table, set1 = 1
sur set1, ajouter l'élément "bar" // "bar" est ajouté en position 1 de la table, set1 = 11
sur set2, ajouter l'élément "bar" // "bar" est déjà en positon 1 de la table, set2 = 01
sur set2, ajouter l'élément "fob" // "fob" est ajouté en position 2 de la table, set2 = 011
sur set1, ajouter l'élément "baz" // "baz" est ajouté en position 3 de la table, set1 = 1101
Note d'implantation, si l'on veut parcourir une série de bits, on peut utiliser la méthode nexSetBit
(prochain bit allumé) comme ceci.
BitSet bitSet = ...
for(int i = bits.nextSetBit(0); i != -1; i = bits.nextSetBit(i + 1)) {
System.out.println(i);
}
Note d'implantation2: le nombre de bits allumés d'un BitSet s'obtient par la méthode cardinality.
Implantez la méthode newCompactSet en utilisant une classe interne CompactSet
sachant qu'il existe une classe java.util.AbstractSet, et n'oubliez pas, de plus,
d'implanter la méthode add sur l'ensemble compact.