本文主要是介绍Java BitSet笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、测试代码
public class BitSetTest {public static void main(String[] args) {BitSet bitsetOne = generateBitSet(5);
// bitsetOne.set(6);//取消注释后这里不会报错,为什么?难道是因为默认的size大小是64位?printResult(bitsetOne);//打印位集内容BitSet bitsetTwo = generateBitSet(5);printResult(bitsetTwo);//由于位集运算时会直接改变原位集内容,所以这里使用副本参与计算BitSetAnd((BitSet)bitsetOne.clone(), (BitSet)bitsetTwo.clone());BitSetOr((BitSet)bitsetOne.clone(), (BitSet)bitsetTwo.clone());BitSetXor((BitSet)bitsetOne.clone(), (BitSet)bitsetTwo.clone());}/*** 随机生成位集* */public static BitSet generateBitSet(int n){System.out.println("BitSet values:");BitSet bitSet = new BitSet();Random r = new Random();for(int i = 0; i < n; i++){int rand = r.nextInt(2);//当产生的随机数为1时,把相应位设置为true,否则,保持默认值不变System.out.print(rand + " ");if(rand == 1){bitSet.set(i);}}System.out.println();return bitSet;}/*** 执行位集的与操作* */public static void BitSetAnd(BitSet bitsetOne, BitSet bitsetTwo){bitsetOne.and(bitsetTwo);System.out.println("BitSet And Result:");printResult(bitsetOne);}/*** 执行位集的或操作* */public static void BitSetOr(BitSet bitsetOne, BitSet bitsetTwo){bitsetOne.or(bitsetTwo);System.out.println("BitSet Or Result:");printResult(bitsetOne);}/*** 执行位集的异或操作* */public static void BitSetXor(BitSet bitsetOne, BitSet bitsetTwo){bitsetOne.xor(bitsetTwo);System.out.println("BitSet Xor Result:");printResult(bitsetOne);}/*** 打印位集内容* */public static void printResult(BitSet set){System.out.println("BitSet toString:" + set.toString());System.out.println("BitSet length:" + set.length());System.out.println("BitSet size:" + set.size());for(int i = 0; i < set.length(); i++){System.out.print(set.get(i) + " ");}System.out.println();System.out.println();}
}
二、执行结果
BitSet values:
0 0 1 1 0
BitSet toString:{2, 3}
BitSet length:4
BitSet size:64
false false true true BitSet values:
1 0 0 1 0
BitSet toString:{0, 3} //返回该BitSet所有被设置为true的位索引
BitSet length:4 //至于为什么不是5,请仔细阅读BitSet length函数返回值含义
BitSet size:64
true false false true //至于为什么最后一个bit未打印出来,请仔细阅读BitSet length函数返回值含义BitSet And Result:
BitSet toString:{3}
BitSet length:4
BitSet size:64
false false false true BitSet Or Result:
BitSet toString:{0, 2, 3}
BitSet length:4
BitSet size:64
true false true true BitSet Xor Result:
BitSet toString:{0, 2}
BitSet length:3
BitSet size:64
true false true
三、关键API说明
(1)默认情况下,set 中所有位的初始值都是 false
。
(2)public int length()
- 返回此
BitSet
的“逻辑大小”:BitSet
中最高设置位的索引加 1。如果BitSet
中不包含任何设置位,则返回零。 -
-
- 返回:
- 此
BitSet
的逻辑大小(注:如果该BitSet创建后没有任何位被设置为true,则该BitSet的length值为0,而不是创建函数中指定的那个值)。
- 此
(3)public int size()
- 返回此
BitSet
表示位值时实际使用空间的位数(虽然空间可能未被使用,但会分配)。set 中值最大的元素是第 size - 1 个元素。 -
-
- 返回:
- 此位 set 中当前的位数(创建后默认大小为64位,当空间用完后再增加64位)。
(4)public void set(int bitIndex)
- 将指定索引处的位设置为
true
。 -
-
- 参数:
-
bitIndex
- 一个位索引。
-
(5)public String toString()
- 返回此位 set 的字符串表示形式。对于此
BitSet
中包含的、处于已设置状态的每个位的索引,在结果中会包含这些索引的十进制表示形式。这些索引是按从低到高的顺序列出的、之间用 "," 分隔(一个逗号加一个空格),并用括号括起来,结果形成了一组整数的常用数学符号。重写
Object
的toString
方法。示例:
BitSet drPepper = new BitSet();
现在drPepper.toString()
返回 "{}
"。drPepper.set(2);
现在drPepper.toString()
返回 "{2}
"。drPepper.set(4);drPepper.set(10);
现在drPepper.toString()
返回 "{2, 4, 10}
"。 -
- 覆盖:
- 类
Object
中的toString
- 类
-
- 返回:
- 此位 set 的字符串表示形式。
这篇关于Java BitSet笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!