¿Cómo funciona nextClearBit () de BitSet en Java realmente?

Este método en la clase BitSet se usa para devolver el índice del primer bit que se establece en falso

import java.util.BitSet;
public class BitSetDemo {
   public static void main(String[] args) {
      BitSet b = new BitSet();
      b.set(5);
      b.set(9);
      b.set(6);
      System.out.println(""+b);
      System.out.println(b.nextClearBit(5));
      System.out.println(b.nextClearBit(9)); 
     }
   }
 Output :
 {5, 6, 9}
 7
 10

En este código, 6 se establece después de 9 pero muestra que los valores se almacenan consecutivamente ((b.nextClearBit (5) devuelve el siguiente valor que es 7). Entonces, ¿cómo BitSet almacena estos valores?

Respuesta 1

BitSet usa bits para almacenar la información, así:

         ╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗
Bits: ║ 0 ║ 1 ║ 0 ║ 0 ║ 1 ║ 1 ║ 0 ║ 0 ║ 0 ║ 0 ║ 0 ║
      ... ╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝
Posición: 10 9 8 7 6 5 4 3 2 1 0

Siempre que lo use set(n), establece el bit en la posición correspondiente. La implementación subyacente es con una serie de largos, pero para comprender la API, es suficiente imaginarlo como una larga serie de bits, ceros y unos, como en el dibujo. Se extiende si es necesario.

Cuando necesita buscar el siguiente bit claro después de 5, pasa al bit número 5 y comienza a buscar hasta llegar a cero. En realidad, la implementación es mucho más rápida, ya que depende de trucos de manipulación de bits, pero de nuevo, para entender la API, así es como se puede imaginar.

Respuesta: 2

Su pregunta indica que podría haber pensado que el resultado de b.nextClearBit(i)alguna manera se vio afectado por el orden en que los diferentes bits se configuraron como trueo false. Esto es falso porque BitSetno recuerda el orden en que los índices recibieron valores.

nextsignifica "siguiente en el orden de los índices" y no "siguiente en el orden de los valores asignados" .

b.nextClearBit(i)devuelve el índice jmás pequeño más grande o igual que ipara el cual b.get(i) == false.

Respuesta: 3

Tengo un requisito de pasar parámetros de línea de comandos al montar .dmg en MAC para esto. He usado JNLP, que está compuesto dinámicamente usando JSP con tipo de contenido de respuesta como application / x-java -...

Estoy trabajando en una base de datos biológica compuesta de genes, proteínas y ensayos. Usando Spring Boot y Thymeleaf, quiero establecer una visualización web. Cada gen se muestra en una página con nombre, ...

Esta podría ser una pregunta muy estúpida, pero tengan paciencia conmigo ya que soy nuevo en Java / J2EE. He instalado JRE6 y JRE7 en mi máquina. He configurado la variable de entorno JAVA_HOME para que apunte a mi directorio JRE6 ...

Estoy usando el siguiente código para leer desde un archivo int lineNumber = 0; pruebe {BufferedReader in = new BufferedReader (nuevo FileReader ("electric.txt")); Línea de cadena = nulo; while ((línea = en ...