是否有一些很好的文本,書籍,pdf或網站介紹瞭如何實現位矢量,特別是在Java中?如何實現位向量(bitset)(Java)?
我問這個問題,因爲我想在Java中做我自己的BitSet實現。原因是我想添加附加功能和調整,如果我從java.util修改BitSet Java類,則無法完成。此外,我想自己做一些實現,以便我可以在開源項目中使用它,而無需處理許可證。
謝謝!
是否有一些很好的文本,書籍,pdf或網站介紹瞭如何實現位矢量,特別是在Java中?如何實現位向量(bitset)(Java)?
我問這個問題,因爲我想在Java中做我自己的BitSet實現。原因是我想添加附加功能和調整,如果我從java.util修改BitSet Java類,則無法完成。此外,我想自己做一些實現,以便我可以在開源項目中使用它,而無需處理許可證。
謝謝!
如果您想爲您的位向量或位集設置奇特的性能或其他奇特功能,那麼您應該繼承現有的位向量/集的實現。或者,您可以參考一些開源實現。但是,如果您想了解位矢量的機制,則它非常簡單。以下是一個實現示例:
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;
}
}
您可以在上面的示例中實現並添加您自己的基於集合的操作功能。
快速實施您的需求。希望能幫助到你。
public class BitSet
{
int[] numbers;
public BitSet(int k){
numbers = new int[(k >> 5) + 1];
}
public void set(int k)
{
int remender = k & 0x1F;
int devide = k >> 5;
result[devide] = result[devide] | (1<<remender);
}
public void unset(int k)
{
int remender = k & 0x1F;
int devide = k >> 5;
result[devide] = result[devide] & (~(1<<remender));
}
public boolean isSet(int k)
{
int remender = k & 0x1F;
int devide = k >> 5;
return (result[devide] & (1<<remender))!=0;
}
}
你的結果在哪裏初始化 –
Apache Mahout有一個開源的bitset。 – bmargulies
爲什麼不使用其他位集並繼承它們? –