代码改变世界

java collections读书笔记(7) bitset

2013-06-16 15:38  很大很老实  阅读(220)  评论(0编辑  收藏  举报

BitSet是叫啥使用的,collection类,这里,我们介绍一下适合使用bitset的地方,以及如何高效使用这个类。

bitset类标识一系列的bits,而且是可增长的。每个indexed元素都是0或者1.

创建bitset:

  public BitSet()
public BitSet(int nbits)

 如果没有指定,则为64;

 具体见源代码:

   private final static int ADDRESS_BITS_PER_WORD = 6;
    private final static int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD;
   

一些方法
public void set(int pos): 位置pos的字位设置为true。
public void set(int bitIndex, boolean value) 将指定索引处的位设置为指定的值。
public void clear(int pos): 位置pos的字位设置为false。
public void clear() : 将此 BitSet 中的所有位设置为 false。
public int cardinality() 返回此 BitSet 中设置为 true 的位数。
public boolean get(int pos): 返回位置是pos的字位值。
public void and(BitSet other): other同该字位集进行与操作,结果作为该字位集的新值。
public void or(BitSet other): other同该字位集进行或操作,结果作为该字位集的新值。
public void xor(BitSet other): other同该字位集进行异或操作,结果作为该字位集的新值。
public void andNot(BitSet set) 清除此 BitSet 中所有的位,set - 用来屏蔽此 BitSet 的 BitSet
public int size(): 返回此 BitSet 表示位值时实际使用空间的位数。
public int length() 返回此 BitSet 的“逻辑大小”:BitSet 中最高设置位的索引加 1。
public int hashCode(): 返回该集合Hash 码, 这个码同集合中的字位值有关。
public boolean equals(Object other): 如果other中的字位同集合中的字位相同,返回true。
public Object clone() 克隆此 BitSet,生成一个与之相等的新 BitSet。
public String toString() 返回此位 set 的字符串表示形式。

举例如下:

import java.util.BitSet;
public class BitOHoney {
public static void main (String args[]) {
String names[] = {
"Hershey's Kisses", "Nestle's Crunch",
"Snickers", "3 Musketeers",
"Milky Way", "Twix", "Mr. Goodbar",
"Crunchie", "Godiva", "Charleston Chew",
"Cadbury's", "Lindt", "Aero", "Hebert",
"Toblerone", "Smarties", "LifeSavers",
"Riesen", "Goobers", "Raisinettes", "Nerds",
"Tootsie Roll", "Sweet Tarts", "Cotton Candy"};
BitSet bits = new BitSet();
for (int i=0, n=names.length; i<n; i++) {
if ((names[i].length() % 2) == 0) {
bits.set(i);
}
}
System.out.println(bits);
System.out.println("Size : " + bits.size());
System.out.println("Length: " + bits.length());
for (int i=0, n=names.length; i<n; i++) {
if (!bits.get(i)) {
System.out.println(names[i] + " is odd");
}
}
BitSet bites = new BitSet();
bites.set(0);
bites.set(1);
bites.set(2);
bites.set(3);
bites.andNot(bits);
System.out.println(bites);
}
}