Java BitSet示例

我正在寻找一个好的Java BitSet示例来处理0和1s。 我试着看着Javadocs,但是我不明白这个类的用法。 例如,如何在两个不同的BitSet对象上使用andorxor方法?

例如:

  BitSet bits1 = new BitSet(); BitSet bits2 = new BitSet(); bits2.set(1000001); bits1.set(1111111); bits2.and(bits1); System.out.println(bits2); 

如果我这样做,它返回bits2为什么是空的?

对于你提到的具体问题:当你调用bits2.set(1000001) ,你将第一百万位和第一位设置为true。 那么当你与位1相交时,其中有一百一十一万一千一百一十一位被设置,它们没有相同的位。

我想你的意思

  bits2.set(0); // set the 0th bit bits2.set(6); // set the 6th bit 

这有助于清理事情吗?

如果你想使用位,你可以在Java 7中使用int值。

 int bits2 = 0b1000001; int bits1 = 0b1111111; bits2 &= bits1; System.out.println(Integer.toBinaryString(bits2)); 

版画

 1000001 

BitSet没有像这样接受string的便利方法。 我已经在下面提供了一些,现在这个例子可以像你期望的那样工作。 请注意,这使用Java 7中的新function; 如果你想使用Java 6,很容易在网上find这些方法的实现。

 import java.util.BitSet; class Scratch { public static void main(String[] args) { BitSet bits1 = fromString("1000001"); BitSet bits2 = fromString("1111111"); System.out.println(toString(bits1)); // prints 1000001 System.out.println(toString(bits2)); // prints 1111111 bits2.and(bits1); System.out.println(toString(bits2)); // prints 1000001 } private static BitSet fromString(final String s) { return BitSet.valueOf(new long[] { Long.parseLong(s, 2) }); } private static String toString(BitSet bs) { return Long.toString(bs.toLongArray()[0], 2); } } 

这里有一些关于bitSet的链接可以帮助你:

更新:

在文档中,有人说:

public void set(int bitIndex)

 Sets the bit at the specified index to true. 

所以当你调用bits2.set(10); ,它被认为是十进制不是1 0,所以你得到的是下面的数字1000000000

为了正确设置,在这个例子中,我想将第二位设置为1,所以我调用bits2.set(1); 因为索引从0开始。

总之 ,对于设置为1的每一位,您需要调用bitSet.Set并为其提供该位的索引。

我分享我的实现创build一个BitSet对象使用位串作为input。

 private static BitSet createFromString(String s) { BitSet t = new BitSet(s.length()); int lastBitIndex = s.length() - 1; for (int i = lastBitIndex; i >= 0; i--) { if ( s.charAt(i) == '1'){ t.set(lastBitIndex - i); } } return t; } 

对于stringinput“1001”

 BitSet s1 = createFromString("1001"); System.out.println(s1); 

输出:

 {0, 3} 

尝试这个:

 import java.util.BitSet; public class BitSetExample { public static void main(String args[]){ BitSet bits1 = new BitSet(7); BitSet bits2 = new BitSet(7); // set some bits for(int i = 0; i < 7; i++) { if((i % 2) == 0) bits1.set(i); if((i % 3) != 0) bits2.set(i); } System.out.println("BitSet1: "); for(int i = 0; i < 7; i++) { System.out.print(bits1.get(i)? "1 ": "0 "); } System.out.println("\nBitSet2: "); for(int i = 0; i < 7; i++) { System.out.print(bits2.get(i)? "1 ": "0 "); } System.out.println(); //And bits1.and(bits2); System.out.println("b1 = b1 AND b2\nBitSet1: "); for(int i = 0; i < 7; i++) { System.out.print(bits1.get(i)? "1 ": "0 "); } System.out.println(); System.out.println("BitSet2: "); for(int i = 0; i < 7; i++) { System.out.print(bits2.get(i)? "1 ": "0 "); } System.out.println(); //Or bits1.or(bits2); System.out.println("b1 = b1 OR b2\nBitSet1: "); for(int i = 0; i < 7; i++) { System.out.print(bits1.get(i)? "1 ": "0 "); } System.out.println(); System.out.println("BitSet2: "); for(int i = 0; i < 7; i++) { System.out.print(bits2.get(i)? "1 ": "0 "); } System.out.println(); //Xor bits1.xor(bits2); System.out.println("b1 = b1 XOR b2\nBitSet1: "); for(int i = 0; i < 7; i++) { System.out.print(bits1.get(i)? "1 ": "0 "); } System.out.println(); System.out.println("BitSet2: "); for(int i = 0; i < 7; i++) { System.out.print(bits2.get(i)? "1 ": "0 "); } System.out.println(); //Setting bits to zero and one bits1.set(1); bits2.set(1,false); System.out.println("set bit 1 of BitSet1 to one and set bit 1 of BitSet2 to zero\nBitSet1: "); for(int i = 0; i < 7; i++) { System.out.print(bits1.get(i)? "1 ": "0 "); } System.out.println(); System.out.println("BitSet2: "); for(int i = 0; i < 7; i++) { System.out.print(bits2.get(i)? "1 ": "0 "); } System.out.println(); } } 

我希望这是有用的。 有关更多信息,请访问: https : //github.com/m-vahidalizadeh/foundations/blob/master/src/data_structures/BitSetExample.java 。