Class BitSet
Fast integer set implementation based on JDK BitSet class
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanadd(int bitIndex) Sets the bit at the specified index totrue.voidadd(int fromIndex, int toIndex) Sets the bits from the specifiedfromIndex(inclusive) to the specifiedtoIndex(exclusive) totrue.booleanbooleanaddAll(Collection<? extends Integer> c) voidPerforms a logical AND of this target bit set with the argument bit set.voidClears all of the bits in thisBitSetwhose corresponding bit is set in the specifiedBitSet.voidcheckSameSize(BitSet set) voidclear()Sets all of the bits in this BitSet tofalse.clone()Cloning thisBitSetproduces a newBitSetthat is equal to it.booleanbooleancontainsAll(Collection<?> c) static BitSetdifference(BitSet a, BitSet b) Returns the difference between two sets as a new set.booleanCompares this object against the specified object.voidflip(int bitIndex) Sets the bit at the specified index to the complement of its current value.voidflip(int fromIndex, int toIndex) Sets each bit from the specifiedfromIndex(inclusive) to the specifiedtoIndex(exclusive) to the complement of its current value.booleanget(int bitIndex) Returns the value of the bit with the specified index.intBitSet can contain elements in range [0, capacity).inthashCode()Returns the hash code value for this bit set.static BitSetintersection(BitSet a, BitSet b) Returns the intersection between two sets as a new setbooleanintersects(BitSet set) Returns true if the specifiedBitSethas any bits set totruethat are also set totruein thisBitSet.booleanisEmpty()Returns true if thisBitSetcontains no bits that are set totrue.iterator()intnextClearBit(int fromIndex) Returns the index of the first bit that is set tofalsethat occurs on or after the specified starting index.intnextSetBit(int fromIndex) Returns the index of the first bit that is set totruethat occurs on or after the specified starting index.static BitSetReturns a new BitSet containing all elements in range [0, n] except those present in the given set.static BitSetof(int maxSize, int... numbers) Initialize a new bitset with the given numbersvoidPerforms a logical OR of this bit set with the bit set argument.intpreviousClearBit(int fromIndex) Returns the index of the nearest bit that is set tofalsethat occurs on or before the specified starting index.intpreviousSetBit(int fromIndex) Returns the index of the nearest bit that is set totruethat occurs on or before the specified starting index.booleanremove(int bitIndex) Sets the bit specified by the index tofalse.voidremove(int fromIndex, int toIndex) Sets the bits from the specifiedfromIndex(inclusive) to the specifiedtoIndex(exclusive) tofalse.booleanbooleanremoveAll(Collection<?> c) booleanretainAll(Collection<?> c) intsize()Returns the number of bits set totruein thisBitSet.stream()Returns a stream of indices for which thisBitSetcontains a bit in the set state.static BitSetsymmetricDifference(BitSet a, BitSet b) Returns the symmetric difference between two sets as a new settoString()Returns a string representation of this bit set.static BitSetReturns the union between two sets as a new setvoidPerforms a logical XOR of this bit set with the bit set argument.Methods inherited from class java.util.AbstractCollection
toArray, toArrayMethods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface java.util.Collection
parallelStream, removeIf, toArray
-
Constructor Details
-
BitSet
public BitSet(int nElements) Creates a bit set whose initial size is large enough to explicitly represent bits with indices in the range0throughnbits-1. All bits are initiallyfalse.- Parameters:
nElements- the initial size of the bit set. Will be rounded to the nearest multiple of 64.- Throws:
NegativeArraySizeException- if the specified initial size is negative
-
BitSet
-
BitSet
-
-
Method Details
-
of
Initialize a new bitset with the given numbers- Parameters:
maxSize- biggest number that may be stored in setnumbers- numbers initially stored in set- Returns:
- new set
-
intersection
Returns the intersection between two sets as a new set- Parameters:
a- First setb- Second set- Returns:
- New set, original sets are not modified
-
not
Returns a new BitSet containing all elements in range [0, n] except those present in the given set.- Parameters:
a- set- Returns:
- New set, original set is not modified
-
union
Returns the union between two sets as a new set- Parameters:
a- First setb- Second set- Returns:
- New set, original sets are not modified
-
difference
Returns the difference between two sets as a new set.- Parameters:
a- First setb- Second set- Returns:
- New set, with all elements in set A removing those that are in set B
-
symmetricDifference
Returns the symmetric difference between two sets as a new set- Parameters:
a- First setb- Second set- Returns:
- New set, original sets are not modified
-
getCapacity
public int getCapacity()BitSet can contain elements in range [0, capacity). Get the upper bound.- Returns:
- capacity, as initialized in constructor method
-
flip
public void flip(int bitIndex) Sets the bit at the specified index to the complement of its current value.- Parameters:
bitIndex- the index of the bit to flip- Throws:
IndexOutOfBoundsException- if the specified index is negative- Since:
- 1.4
-
flip
public void flip(int fromIndex, int toIndex) Sets each bit from the specifiedfromIndex(inclusive) to the specifiedtoIndex(exclusive) to the complement of its current value.- Parameters:
fromIndex- index of the first bit to fliptoIndex- index after the last bit to flip- Throws:
IndexOutOfBoundsException- iffromIndexis negative, ortoIndexis negative, orfromIndexis larger thantoIndex- Since:
- 1.4
-
add
public boolean add(int bitIndex) Sets the bit at the specified index totrue.- Parameters:
bitIndex- a bit index- Returns:
- true if an element was added, false if the set was not modified
- Throws:
IndexOutOfBoundsException- if the specified index is negative
-
addAll
- Specified by:
addAllin interfaceCollection<Integer>- Specified by:
addAllin interfaceSet<Integer>- Overrides:
addAllin classAbstractCollection<Integer>
-
add
public void add(int fromIndex, int toIndex) Sets the bits from the specifiedfromIndex(inclusive) to the specifiedtoIndex(exclusive) totrue.- Parameters:
fromIndex- index of the first bit to be set, inclusivetoIndex- index after the last bit to be set, exclusive- Throws:
IndexOutOfBoundsException- iffromIndexis negative, ortoIndexis negative, orfromIndexis larger thantoIndex- Since:
- 1.4
-
remove
public boolean remove(int bitIndex) Sets the bit specified by the index tofalse.- Parameters:
bitIndex- the index of the bit to be cleared- Returns:
- true if an element was removed, false if the set was not modified
- Throws:
IndexOutOfBoundsException- if the specified index is negative
-
remove
public void remove(int fromIndex, int toIndex) Sets the bits from the specifiedfromIndex(inclusive) to the specifiedtoIndex(exclusive) tofalse.- Parameters:
fromIndex- index of the first bit to be clearedtoIndex- index after the last bit to be cleared- Throws:
IndexOutOfBoundsException- iffromIndexis negative, ortoIndexis negative, orfromIndexis larger thantoIndex- Since:
- 1.4
-
clear
public void clear()Sets all of the bits in this BitSet tofalse.- Specified by:
clearin interfaceCollection<Integer>- Specified by:
clearin interfaceSet<Integer>- Overrides:
clearin classAbstractCollection<Integer>- Since:
- 1.4
-
get
public boolean get(int bitIndex) Returns the value of the bit with the specified index. The value istrueif the bit with the indexbitIndexis currently set in thisBitSet; otherwise, the result isfalse.- Parameters:
bitIndex- the bit index- Returns:
- the value of the bit with the specified index
- Throws:
IndexOutOfBoundsException- if the specified index is negative
-
nextSetBit
public int nextSetBit(int fromIndex) Returns the index of the first bit that is set totruethat occurs on or after the specified starting index. If no such bit exists then-1is returned.To iterate over the
truebits in aBitSet, use the following loop:for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) { // operate on index i here if (i == Integer.MAX_VALUE) { break; // or (i+1) would overflow } }- Parameters:
fromIndex- the index to start checking from (inclusive)- Returns:
- the index of the next set bit, or
-1if there is no such bit - Throws:
IndexOutOfBoundsException- if the specified index is negative- Since:
- 1.4
-
nextClearBit
public int nextClearBit(int fromIndex) Returns the index of the first bit that is set tofalsethat occurs on or after the specified starting index. If no such bit exists then-1is returned.- Parameters:
fromIndex- the index to start checking from (inclusive)- Returns:
- the index of the next clear bit
- Throws:
IndexOutOfBoundsException- if the specified index is negative- Since:
- 1.4
-
previousSetBit
public int previousSetBit(int fromIndex) Returns the index of the nearest bit that is set totruethat occurs on or before the specified starting index. If no such bit exists, or if-1is given as the starting index, then-1is returned.To iterate over the
truebits in aBitSet, use the following loop:for (int i = bs.length(); (i = bs.previousSetBit(i-1)) >= 0; ) { // operate on index i here }- Parameters:
fromIndex- the index to start checking from (inclusive)- Returns:
- the index of the previous set bit, or
-1if there is no such bit - Throws:
IndexOutOfBoundsException- if the specified index is less than-1- Since:
- 1.7
-
previousClearBit
public int previousClearBit(int fromIndex) Returns the index of the nearest bit that is set tofalsethat occurs on or before the specified starting index. If no such bit exists, or if-1is given as the starting index, then-1is returned.- Parameters:
fromIndex- the index to start checking from (inclusive)- Returns:
- the index of the previous clear bit, or
-1if there is no such bit - Throws:
IndexOutOfBoundsException- if the specified index is less than-1- Since:
- 1.7
-
isEmpty
public boolean isEmpty()Returns true if thisBitSetcontains no bits that are set totrue.- Specified by:
isEmptyin interfaceCollection<Integer>- Specified by:
isEmptyin interfaceSet<Integer>- Overrides:
isEmptyin classAbstractCollection<Integer>- Returns:
- boolean indicating whether this
BitSetis empty - Since:
- 1.4
-
intersects
Returns true if the specifiedBitSethas any bits set totruethat are also set totruein thisBitSet.- Parameters:
set-BitSetto intersect with- Returns:
- boolean indicating whether this
BitSetintersects the specifiedBitSet - Since:
- 1.4
-
size
public int size()Returns the number of bits set totruein thisBitSet.- Specified by:
sizein interfaceCollection<Integer>- Specified by:
sizein interfaceSet<Integer>- Specified by:
sizein classAbstractCollection<Integer>- Returns:
- the number of bits set to
truein thisBitSet - Since:
- 1.4
-
and
Performs a logical AND of this target bit set with the argument bit set. This bit set is modified so that each bit in it has the valuetrueif and only if it both initially had the valuetrueand the corresponding bit in the bit set argument also had the valuetrue.- Parameters:
set- a bit set
-
or
Performs a logical OR of this bit set with the bit set argument. This bit set is modified so that a bit in it has the valuetrueif and only if it either already had the valuetrueor the corresponding bit in the bit set argument has the valuetrue.- Parameters:
set- a bit set
-
xor
Performs a logical XOR of this bit set with the bit set argument. This bit set is modified so that a bit in it has the valuetrueif and only if one of the following statements holds:- The bit initially has the value
true, and the corresponding bit in the argument has the valuefalse. - The bit initially has the value
false, and the corresponding bit in the argument has the valuetrue.
- Parameters:
set- a bit set
- The bit initially has the value
-
andNot
Clears all of the bits in thisBitSetwhose corresponding bit is set in the specifiedBitSet.- Parameters:
set- theBitSetwith which to mask thisBitSet- Since:
- 1.2
-
checkSameSize
-
hashCode
public int hashCode()Returns the hash code value for this bit set. The hash code depends only on which bits are set within thisBitSet.The hash code is defined to be the result of the following calculation:
Note that the hash code changes if the set of bits is altered.public int hashCode() { long h = 1234; long[] words = toLongArray(); for (int i = words.length; --i >= 0; ) h ^= words[i] * (i + 1); return (int)((h >> 32) ^ h); }- Specified by:
hashCodein interfaceCollection<Integer>- Specified by:
hashCodein interfaceSet<Integer>- Overrides:
hashCodein classAbstractSet<Integer>- Returns:
- the hash code value for this bit set
-
iterator
-
equals
Compares this object against the specified object. The result istrueif and only if the argument is notnulland is aBitSetobject that has exactly the same set of bits set totrueas this bit set. That is, for every nonnegativeintindexk,((BitSet)obj).get(k) == this.get(k)
must be true. IMPORTANT: The current sizes of the two bit sets ARE COMPARED FIRST.- Specified by:
equalsin interfaceCollection<Integer>- Specified by:
equalsin interfaceSet<Integer>- Overrides:
equalsin classAbstractSet<Integer>- Parameters:
obj- the object to compare with- Returns:
trueif the objects are the same;falseotherwise- See Also:
-
clone
Cloning thisBitSetproduces a newBitSetthat is equal to it. The clone of the bit set is another bit set that has exactly the same bits set totrueas this bit set. -
toString
Returns a string representation of this bit set. For every index for which thisBitSetcontains a bit in the set state, the decimal representation of that index is included in the result. Such indices are listed in order from lowest to highest, separated by ", " (a comma and a space) and surrounded by braces, resulting in the usual mathematical notation for a set of integers.Example:
BitSet drPepper = new BitSet();
NowdrPepper.toString()returns "{}".drPepper.set(2);
NowdrPepper.toString()returns "{2}".drPepper.set(4); drPepper.set(10);
NowdrPepper.toString()returns "{2, 4, 10}".- Overrides:
toStringin classAbstractCollection<Integer>- Returns:
- a string representation of this bit set
-
add
- Specified by:
addin interfaceCollection<Integer>- Specified by:
addin interfaceSet<Integer>- Overrides:
addin classAbstractCollection<Integer>
-
remove
- Specified by:
removein interfaceCollection<Integer>- Specified by:
removein interfaceSet<Integer>- Overrides:
removein classAbstractCollection<Integer>
-
contains
- Specified by:
containsin interfaceCollection<Integer>- Specified by:
containsin interfaceSet<Integer>- Overrides:
containsin classAbstractCollection<Integer>
-
spliterator
-
removeAll
- Specified by:
removeAllin interfaceCollection<Integer>- Specified by:
removeAllin interfaceSet<Integer>- Overrides:
removeAllin classAbstractSet<Integer>
-
containsAll
- Specified by:
containsAllin interfaceCollection<Integer>- Specified by:
containsAllin interfaceSet<Integer>- Overrides:
containsAllin classAbstractCollection<Integer>
-
retainAll
- Specified by:
retainAllin interfaceCollection<Integer>- Specified by:
retainAllin interfaceSet<Integer>- Overrides:
retainAllin classAbstractCollection<Integer>
-
stream
Returns a stream of indices for which thisBitSetcontains a bit in the set state. The indices are returned in order, from lowest to highest. The size of the stream is the number of bits in the set state, equal to the value returned by thesize()()} method.The stream binds to this bit set when the terminal stream operation commences (specifically, the spliterator for the stream is late-binding). If the bit set is modified during that operation then the result is undefined.
- Returns:
- a stream of integers representing set indices
- Since:
- 1.8
-