Nếu bạn muốn hiệu suất ưa thích hoặc các tính năng ưa thích khác cho bit bit hoặc bit của bạn, sau đó như một số đã được đề xuất, bạn nên kế thừa thực hiện hiện tại của bit vector/bộ. Hoặc, bạn có thể tham khảo một số triển khai nguồn mở. Tuy nhiên, nếu bạn muốn tìm hiểu cơ chế của bit bit, nó khá đơn giản. Dưới đây là triển khai ví dụ:
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;
}
}
Bạn có thể triển khai và thêm các tính năng hoạt động thiết lập của riêng mình vào ví dụ trên.
Apache Mahout có bitet nguồn mở. – bmargulies
tại sao không sử dụng các bitets khác và chỉ kế thừa chúng? –