# Class BitSet

java.lang.Object
java.util.BitSet

public class BitSet extends Object
The `BitSet` class implements a bit field. Each element in a `BitSet` can be on(1) or off(0). A `BitSet` is created with a given size and grows if this size is exceeded. Growth is always rounded to a 64 bit boundary.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `BitSet()`
  Create a new `BitSet` with size equal to 64 bits.
  `BitSet(int nbits)`
  Create a new `BitSet` with size equal to nbits.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `and(BitSet bs)`
  Performs the logical AND of this `BitSet` with another `BitSet`.
  `void`
  `andNot(BitSet bs)`
  Clears all bits in the receiver which are also set in the parameter `BitSet`.
  `int`
  `cardinality()`
  Returns the number of bits that are `true` in this `BitSet`.
  `void`
  `clear()`
  Clears all the bits in this `BitSet`.
  `void`
  `clear(int pos)`
  Clears the bit at index `pos`.
  `void`
  `clear(int pos1, int pos2)`
  Clears the bits starting from `pos1` to `pos2`.
  `boolean`
  `equals(Object obj)`
  Compares the argument to this `BitSet` and returns whether they are equal.
  `void`
  `flip(int pos)`
  Flips the bit at index `pos`.
  `void`
  `flip(int pos1, int pos2)`
  Flips the bits starting from `pos1` to `pos2`.
  `boolean`
  `get(int pos)`
  Retrieves the bit at index `pos`.
  `BitSet`
  `get(int pos1, int pos2)`
  Retrieves the bits starting from `pos1` to `pos2` and returns back a new bitset made of these bits.
  `int`
  `hashCode()`
  Computes the hash code for this `BitSet`.
  `boolean`
  `intersects(BitSet bs)`
  Checks if these two `BitSet`s have at least one bit set to true in the same position.
  `boolean`
  `isEmpty()`
  Returns true if all the bits in this `BitSet` are set to false.
  `int`
  `length()`
  Returns the number of bits up to and including the highest bit set.
  `int`
  `nextClearBit(int pos)`
  Returns the position of the first bit that is `false` on or after `pos`.
  `int`
  `nextSetBit(int pos)`
  Returns the position of the first bit that is `true` on or after `pos`.
  `void`
  `or(BitSet bs)`
  Performs the logical OR of this `BitSet` with another `BitSet`.
  `void`
  `set(int pos)`
  Sets the bit at index `pos` to 1.
  `void`
  `set(int pos, boolean val)`
  Sets the bit at index `pos` to `val`.
  `void`
  `set(int pos1, int pos2)`
  Sets the bits starting from `pos1` to `pos2`.
  `void`
  `set(int pos1, int pos2, boolean val)`
  Sets the bits starting from `pos1` to `pos2` to the given `val`.
  `int`
  `size()`
  Returns the number of bits this `BitSet` has.
  `String`
  `toString()`
  Returns a string containing a concise, human-readable description of the receiver.
  `void`
  `xor(BitSet bs)`
  Performs the logical XOR of this `BitSet` with another `BitSet`.

  ### Methods inherited from class Object

  `clone, getClass, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### BitSet

    public BitSet()

    Create a new `BitSet` with size equal to 64 bits.

    ###### See also

    - #clear(int)

    - #set(int)

    - #clear()

    - #clear(int, int)

    - #set(int, boolean)

    - #set(int, int)

    - #set(int, int, boolean)

  - ### BitSet

    public BitSet(int nbits)

    Create a new `BitSet` with size equal to nbits. If nbits is not a multiple of 64, then create a `BitSet` with size nbits rounded to the next closest multiple of 64.

    ###### Parameters

    - `nbits`: the size of the bit set.

    ###### Throws

    - `NegativeArraySizeException`: if `nbits` is negative.

    ###### See also

    - #clear(int)

    - #set(int)

    - #clear()

    - #clear(int, int)

    - #set(int, boolean)

    - #set(int, int)

    - #set(int, int, boolean)

- ## Method Details

  - ### equals

    public boolean equals(Object obj)

    Compares the argument to this `BitSet` and returns whether they are equal. The object must be an instance of `BitSet` with the same bits set.

    ###### Parameters

    - `obj`: the `BitSet` object to compare.

    ###### Returns

    Overrides:
      `equals` in class `Object`
    Returns:

      a `boolean` indicating whether or not this `BitSet` and `obj` are equal.

      ###### See also

      - #hashCode

  - public int hashCode()

    Computes the hash code for this `BitSet`. If two `BitSet`s are equal the have to return the same result for `hashCode()`.

    ###### Returns

    Overrides:
      `hashCode` in class `Object`
    Returns:

      the `int` representing the hash code for this bit set.

      ###### See also

      - #equals

      - java.util.Hashtable

  - ### get

    public boolean get(int pos)

    Retrieves the bit at index `pos`. Grows the `BitSet` if `pos > size`.

    ###### Parameters

    - `pos`: the index of the bit to be retrieved.

    ###### Returns

    Returns:

      `true` if the bit at `pos` is set, `false` otherwise.

      ###### Throws

      - `IndexOutOfBoundsException`: if `pos` is negative.

      ###### See also

      - #clear(int)

      - #set(int)

      - #clear()

      - #clear(int, int)

      - #set(int, boolean)

      - #set(int, int)

      - #set(int, int, boolean)

  - ### get

    public BitSet get(int pos1, int pos2)

    Retrieves the bits starting from `pos1` to `pos2` and returns back a new bitset made of these bits. Grows the `BitSet` if `pos2 > size`.

    ###### Parameters

    - `pos1`: beginning position.

    - `pos2`: ending position.

    ###### Returns

    new bitset of the range specified.

    ###### Throws

    - `IndexOutOfBoundsException`: @throws IndexOutOfBoundsException if `pos1` or `pos2` is negative, or if `pos2` is smaller than `pos1`.

    ###### See also

    - #get(int)

  - ### set

    public void set(int pos)

    Sets the bit at index `pos` to 1. Grows the `BitSet` if `pos > size`.

    ###### Parameters

    - `pos`: the index of the bit to set.

    ###### Throws

    - `IndexOutOfBoundsException`: if `pos` is negative.

    ###### See also

    - #clear(int)

    - #clear()

    - #clear(int, int)

  - ### set

    public void set(int pos, boolean val)

    Sets the bit at index `pos` to `val`. Grows the `BitSet` if `pos > size`.

    ###### Parameters

    - `pos`: the index of the bit to set.

    - `val`: value to set the bit.

    ###### Throws

    - `IndexOutOfBoundsException`: if `pos` is negative.

    ###### See also

    - #set(int)

  - ### set

    public void set(int pos1, int pos2)

    Sets the bits starting from `pos1` to `pos2`. Grows the `BitSet` if `pos2 > size`.

    ###### Parameters

    - `pos1`: beginning position.

    - `pos2`: ending position.

    ###### Throws

    - `IndexOutOfBoundsException`: @throws IndexOutOfBoundsException if `pos1` or `pos2` is negative, or if `pos2` is smaller than `pos1`.

    ###### See also

    - #set(int)

  - ### set

    public void set(int pos1, int pos2, boolean val)

    Sets the bits starting from `pos1` to `pos2` to the given `val`. Grows the `BitSet` if `pos2 > size`.

    ###### Parameters

    - `pos1`: beginning position.

    - `pos2`: ending position.

    - `val`: value to set these bits.

    ###### Throws

    - `IndexOutOfBoundsException`: @throws IndexOutOfBoundsException if `pos1` or `pos2` is negative, or if `pos2` is smaller than `pos1`.

    ###### See also

    - #set(int,int)

  - ### clear

    public void clear()

    Clears all the bits in this `BitSet`.

    ###### See also

    - #clear(int)

    - #clear(int, int)

  - ### clear

    public void clear(int pos)

    Clears the bit at index `pos`. Grows the `BitSet` if `pos > size`.

    ###### Parameters

    - `pos`: the index of the bit to clear.

    ###### Throws

    - `IndexOutOfBoundsException`: if `pos` is negative.

    ###### See also

    - #clear(int, int)

  - ### clear

    public void clear(int pos1, int pos2)

    Clears the bits starting from `pos1` to `pos2`. Grows the `BitSet` if `pos2 > size`.

    ###### Parameters

    - `pos1`: beginning position.

    - `pos2`: ending position.

    ###### Throws

    - `IndexOutOfBoundsException`: @throws IndexOutOfBoundsException if `pos1` or `pos2` is negative, or if `pos2` is smaller than `pos1`.

    ###### See also

    - #clear(int)

  - ### flip

    public void flip(int pos)

    Flips the bit at index `pos`. Grows the `BitSet` if `pos > size`.

    ###### Parameters

    - `pos`: the index of the bit to flip.

    ###### Throws

    - `IndexOutOfBoundsException`: if `pos` is negative.

    ###### See also

    - #flip(int, int)

  - ### flip

    public void flip(int pos1, int pos2)

    Flips the bits starting from `pos1` to `pos2`. Grows the `BitSet` if `pos2 > size`.

    ###### Parameters

    - `pos1`: beginning position.

    - `pos2`: ending position.

    ###### Throws

    - `IndexOutOfBoundsException`: @throws IndexOutOfBoundsException if `pos1` or `pos2` is negative, or if `pos2` is smaller than `pos1`.

    ###### See also

    - #flip(int)

  - ### intersects

    public boolean intersects(BitSet bs)

    Checks if these two `BitSet`s have at least one bit set to true in the same position.

    ###### Parameters

    - `bs`: `BitSet` used to calculate the intersection.

    ###### Returns

    Returns:
      `true` if bs intersects with this `BitSet`, `false` otherwise.

  - ### and

    public void and(BitSet bs)

    Performs the logical AND of this `BitSet` with another `BitSet`. The values of this `BitSet` are changed accordingly.

    ###### Parameters

    - `bs`: `BitSet` to AND with.

    ###### See also

    - #or

    - #xor

  - ### andNot

    public void andNot(BitSet bs)

    Clears all bits in the receiver which are also set in the parameter `BitSet`. The values of this `BitSet` are changed accordingly.

    ###### Parameters

    - `bs`: `BitSet` to ANDNOT with.

  - ### or

    public void or(BitSet bs)

    Performs the logical OR of this `BitSet` with another `BitSet`. The values of this `BitSet` are changed accordingly.

    ###### Parameters

    - `bs`: `BitSet` to OR with.

    ###### See also

    - #xor

    - #and

  - ### xor

    public void xor(BitSet bs)

    Performs the logical XOR of this `BitSet` with another `BitSet`. The values of this `BitSet` are changed accordingly.

    ###### Parameters

    - `bs`: `BitSet` to XOR with.

    ###### See also

    - #or

    - #and

  - ### size

    public int size()

    Returns the number of bits this `BitSet` has.

    ###### Returns

    the number of bits contained in this `BitSet`.

    ###### See also

    - #length

  - public int length()

    Returns the number of bits up to and including the highest bit set.

    ###### Returns

    the length of the `BitSet`.

  - ### toString

    public String toString()

    Returns a string containing a concise, human-readable description of the receiver.

    ###### Returns

    a comma delimited list of the indices of all bits that are set.

    Overrides:
      `toString` in class `Object`

  - ### nextSetBit

    public int nextSetBit(int pos)

    Returns the position of the first bit that is `true` on or after `pos`.

    ###### Parameters

    - `pos`: the starting position (inclusive).

    ###### Returns

    -1 if there is no bits that are set to `true` on or after `pos`.

  - ### nextClearBit

    public int nextClearBit(int pos)

    Returns the position of the first bit that is `false` on or after `pos`.

    ###### Parameters

    - `pos`: the starting position (inclusive).

    ###### Returns

    Returns:
      the position of the next bit set to `false`, even if it is further than this `BitSet`'s size.

  - ### isEmpty

    public boolean isEmpty()

    Returns true if all the bits in this `BitSet` are set to false.

    ###### Returns

    Returns:
      `true` if the `BitSet` is empty, `false` otherwise.

  - ### cardinality

    public int cardinality()

    Returns the number of bits that are `true` in this `BitSet`.

    ###### Returns

    the number of `true` bits in the set.