This class implements an array or list of boolean values storing them using a very compact representation that requires only about one bit per value stored. It implements methods for setting, querying, and flipping the values stored at any given position within the list, for counting the number of true values stored in the list, and for finding the next TRue or false value in the list. It also defines a number of methods that perform bitwise boolean operations on two BitSet objects. Despite its name, BitSet does not implement the Set interface, and does not even have the behavior associated with a set; it is a list or vector for boolean values, but is not related to the List interface or Vector class. This class was introduced in Java 1.0, but was substantially enhanced in Java 1.4; note that many of the methods described below are only available in Java 1.4 and later.
Create a BitSet with the BitSet( ) constructor. You may optionally specify a size (the number of bits) for the BitSet, but this merely provides an optimization since a BitSet will grow as needed to accomodate any number of boolean values. BitSet does not define a precise notion of the size of a "set." The size( ) method returns the number of boolean values that can be stored before more internal storage needs to be allocated. The length( ) method returns one more than the highest index of a set bit (i.e., a true value). This means that a BitSet that contains all false values will have a length( ) of zero. If your code needs to remember the index of the highest value stored in a BitSet, regardless of whether that value was TRue or false, then you should maintain that length information separately from the BitSet.
Set values in a BitSet with the set( ) method. There are four versions of this method. Two set the value at a specific index, and two set values for a range of indexes. Two of the set( ) methods do not take a value argument to set: they "set" the specified bit or range of bites, which means they store the value true. The other two methods take a boolean argument, allowing you to set the specified value or range of values to true (a set bit) or false (a clear bit). There are also two clear( ) methods that "clear" (or set to false) the value at the specified index or range of indexes. The flip( ) methods flip, or toggle (change TRue to false and false to TRue), the value or values at the specified index or range. The set( ), clear( ), and flip( ) methods, as well as all other BitSet methods that operate on a range of values specify the range with two index values. They define the range as the values starting from, and including, the value stored at the first specified index up to,
but not including , the value stored at the second specified index. (A number of methods of String and related classes follow the same convention for specifying a range of characters.)
To test the value stored at a specified location, use get( ), which returns true if the specified bit is set, or false if it is not set. There is also a get( ) method that specifies a range of bits, and returns their state in the form of a BitSet: this get( ) method is analogous to the substring( ) method of a String. Because a BitSet does not define a maximum index, it is legal to pass any non-negative value to get( ). If the index you specify is greater than or equal to the value returned by length( ), then the returned value will always be false.
cardinality( ) returns the number of true values (or of set bits) stored in a BitSet. isEmpty( ) returns true if a BitSet has no true values stored in it (in this case, both length( ) and cardinality( ) return 0). nextSetBit( ) returns the first index at or after the specified index at which a true value is stored (or at which the bit is set). You can use this method in a loop to iterate through the indexes of true values. nextClearBit( ) is similar, but searches the BitSet for false values (clear bits) intead. The intersects( ) method returns true if the target BitSet and the argument BitSet intersect: that is if there is at least one index at which both BitSet objects have a true value.
BitSet defines several methods that perform bitwise Boolean operations. These methods combine the BitSet on which they are invoked (called the "target" BitSet below) with the BitSet passed as an argument, and store the result in the target BitSet. If you want to perform a Boolean operation without altering the original BitSet, you should first make a copy of the original with the clone( ) method and invoke the method on the copy. The and( ) method preforms a bitwise Boolean AND operation, much like the & does when applied to integer arguments. A value in the target BitSet will be true only if it was originally true
and the value at the same index of argument BitSet is also TRue. For all false values in the argument BitSet, and( ) sets the corresponding value in the target BitSet to false, leaving other values unchanged. The andNot( ) method combines a Boolean AND operation with a Boolean NOT operation on the argument BitSet (it does not alter the contents of that argument BitSet, hoever). The result is that for all TRue values in the argument BitSet, the corresponding values in the target BitSet are set to false.
The or( ) method performs a bitwise Boolean OR operation like the | operator: a value in the BitSet will be set to true if its original value was TRue
or the corresponding value in the argument BitSet was true. For all TRue values in the argument BitSet, the or( ) method sets the corresponding value in the target BitSet to true, leaving the other values unchanged. The xor( ) method performs an "exclusive OR" operation: sets a value in the target BitSet to TRue if it was originally true or if the corresponding value in the argument BitSet was true. If both values were false, or if both values were true, however, it sets the value to false.
Finally, the toString( ) method returns a String representation of a BitSet that consists of a list within curly braces of the indexes at which TRue values are stored.
The BitSet class is not threadsafe.
public classBitSet implements Cloneable, Serializable { // Public Constructors public
BitSet ( ); public
BitSet (int
nbits ); // Public Instance Methods public void
and (BitSet
set );
1.2 public void
andNot (BitSet
set );
1.4 public int
cardinality ( );
1.4 public void
clear ( ); public void
clear (int
bitIndex );
1.4 public void
clear (int
fromIndex , int
toIndex );
1.4 public void
flip (int
bitIndex );
1.4 public void
flip (int
fromIndex , int
toIndex ); public boolean
get (int
bitIndex );
1.4 public BitSet
get (int
fromIndex , int
toIndex );
1.4 public boolean
intersects (BitSet
set );
1.4 public boolean
isEmpty ( ); default:true
1.2 public int
length ( );
1.4 public int
nextClearBit (int
fromIndex );
1.4 public int
nextSetBit (int
fromIndex ); public void
or (BitSet
set ); public void
set (int
bitIndex );
1.4 public void
set (int
bitIndex , boolean
value );
1.4 public void
set (int
fromIndex , int
toIndex );
1.4 public void
set (int
fromIndex , int
toIndex , boolean
value ); public int
size ( ); public void
xor (BitSet
set ); // Public Methods Overriding Object public Object
clone ( ); public boolean
equals (Object
obj ); public int
hashCode ( ); public String
toString ( ); }