Si desea un rendimiento sofisticado u otras características sofisticadas para su vector de bits o conjunto de bits, entonces, como ya se sugirió, debería heredar una implementación existente de vector/conjunto de bits. O bien, puede consultar algunas implementaciones de código abierto. Sin embargo, si desea aprender el mecanismo del vector de bits, es bastante simple. Aquí hay una implementación como ejemplo:
class BitSet{
private Byte[] p;
private BitSet(){
p = null;
}
public BitSet(int n){
assert n > 0;
p = new Byte[(n - 1) >> 3 + 1];
}
public BitSet Complement(){
BitSet bs = new BitSet();
bs.p = new Byte[p.length];
for(int i = 0; i < p.length; i++){
bs.p[i] = ~ p[i];
}
return bs;
}
public BitSet Union(BitSet bs2){
assert p.length == bs2.p.length;
BitSet bs = new BitSet();
bs.p = new Byte[p.length];
for(int i = 0; i < p.length; i++){
bs.p[i] = p[i] | bs2.p[i];
}
return bs;
}
public BitSet Intersection(BitSet bs2){
assert p.length == bs2.p.length;
BitSet bs = new BitSet();
bs.p = new Byte[p.length];
for(int i = 0; i < p.length; i++){
bs.p[i] = p[i] & bs2.p[i];
}
return bs;
}
}
Puede implementar y agregar sus propias funciones de operación configuradas en el ejemplo anterior.
Apache Mahout tiene un conjunto de bits de código abierto. – bmargulies
¿por qué no utilizar otros bitsets y simplemente heredarlos? –