2011-10-22 22 views
5

¿Hay algún buen texto, libros, pdf o sitio web que explique cómo implementar un vector de bits, especialmente en Java?¿Cómo implementar un vector de bits (conjunto de bits) (en Java)?

Hago esta pregunta porque me gustaría hacer mi propia implementación de BitSet en Java. La razón es que quiero agregar funciones adicionales y ajustar que no se puede hacer si modifico la clase BitSet Java de java.util. Además, quiero hacer mi propia implementación para poder usarla en mi proyecto de código abierto sin tener que lidiar con licencias.

Gracias!

+0

Apache Mahout tiene un conjunto de bits de código abierto. – bmargulies

+1

¿por qué no utilizar otros bitsets y simplemente heredarlos? –

Respuesta

5

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.

2

Una implementación rápida para su requerimiento. Espero eso ayude.

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; 
     } 
    } 
+0

donde es inicializado su resultado –

Cuestiones relacionadas