Package org.roaringbitmap
Class FastRankRoaringBitmap
java.lang.Object
org.roaringbitmap.RoaringBitmap
org.roaringbitmap.FastRankRoaringBitmap
- All Implemented Interfaces:
Externalizable,Serializable,Cloneable,Iterable<Integer>,AppendableStorage<Container>,BitmapDataProvider,ImmutableBitmapDataProvider
This extends
RoaringBitmap to provide better performance for .rank and .select
operations, at the cost of maintain a cache of cardinalities.
On RoaringBitmap.select(int) and RoaringBitmap.rank(int) operations,
RoaringBitmap needs to iterate along all underlying buckets to cumulate their
cardinalities. This may lead to sub-optimal performance for application doing a large amount of
.rank/.select over read-only RoaringBitmap, especially if the RoaringBitmap holds
a large number of underlying buckets.
This implementation will discard the cache of cardinality on any write operations, and it will
memoize the computed cardinalities on any .rank or .select operation- See Also:
- Serialized Form
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.roaringbitmap.ImmutableBitmapDataProvider
ImmutableBitmapDataProvider.RoaringOfInt -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidadd(int x)Add the value to the container (set the value to "true"), whether it already appears or not.voidadd(int... dat)Set all the specified values to true.voidadd(int rangeStart, int rangeEnd)Deprecated.voidadd(long rangeStart, long rangeEnd)Add to the current bitmap all integers in [rangeStart,rangeEnd).voidand(RoaringBitmap x2)In-place bitwise AND (intersection) operation.voidandNot(RoaringBitmap x2)In-place bitwise ANDNOT (difference) operation.booleancheckedAdd(int x)Add the value to the container (set the value to "true"), whether it already appears or not.booleancheckedRemove(int x)If present remove the specified integer (effectively, sets its bit value to false)voidclear()reset to an empty bitmap; result occupies as much space a newly created bitmap.voidflip(int x)Add the value if it is not already present, otherwise remove it.voidflip(int rangeStart, int rangeEnd)Deprecated.voidflip(long rangeStart, long rangeEnd)Modifies the current bitmap by complementing the bits in the given range, from rangeStart (inclusive) rangeEnd (exclusive).Get a special iterator that allows .peekNextRank efficientlylongEstimate of the memory usage of this data structure.voidor(RoaringBitmap x2)In-place bitwise OR (union) operation.longrankLong(int x)Rank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality()).voidremove(int x)If present remove the specified integer (effectively, sets its bit value to false)voidremove(int rangeStart, int rangeEnd)Deprecated.voidremove(long rangeStart, long rangeEnd)Remove from the current bitmap all integers in [rangeStart,rangeEnd).intselect(int j)Return the jth value stored in this bitmap.voidxor(RoaringBitmap x2)In-place bitwise XOR (symmetric difference) operation.Methods inherited from class org.roaringbitmap.RoaringBitmap
add, add, addN, addOffset, and, and, and, andCardinality, andNot, andNot, andNot, andNotCardinality, append, bitmapOf, bitmapOfRange, bitmapOfUnordered, cardinalityExceeds, clone, contains, contains, contains, deserialize, deserialize, deserialize, equals, first, flip, flip, forAllInRange, forEach, forEachInRange, getBatchIterator, getCardinality, getContainerPointer, getIntIterator, getLongCardinality, getReverseIntIterator, getSizeInBytes, hashCode, hasRunCompression, intersects, intersects, isEmpty, isHammingSimilar, iterator, last, lazyor, lazyor, lazyorfromlazyinputs, limit, maximumSerializedSize, naivelazyor, nextAbsentValue, nextValue, or, or, or, or, or, orCardinality, orNot, orNot, previousAbsentValue, previousValue, rangeCardinality, rank, readExternal, remove, remove, removeRunCompression, repairAfterLazy, runOptimize, serialize, serialize, serializedSizeInBytes, toArray, toMutableRoaringBitmap, toString, trim, writeExternal, xor, xor, xor, xorCardinalityMethods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface org.roaringbitmap.ImmutableBitmapDataProvider
reverseStream, streamMethods inherited from interface java.lang.Iterable
forEach, spliterator
-
Constructor Details
-
FastRankRoaringBitmap
public FastRankRoaringBitmap() -
FastRankRoaringBitmap
-
-
Method Details
-
add
public void add(long rangeStart, long rangeEnd)Description copied from class:RoaringBitmapAdd to the current bitmap all integers in [rangeStart,rangeEnd).- Specified by:
addin interfaceBitmapDataProvider- Overrides:
addin classRoaringBitmap- Parameters:
rangeStart- inclusive beginning of rangerangeEnd- exclusive ending of range
-
add
public void add(int x)Description copied from class:RoaringBitmapAdd the value to the container (set the value to "true"), whether it already appears or not. Java lacks native unsigned integers but the x argument is considered to be unsigned. Within bitmaps, numbers are ordered according toInteger.compareUnsigned(int, int). We order the numbers like 0, 1, ..., 2147483647, -2147483648, -2147483647,..., -1.- Specified by:
addin interfaceBitmapDataProvider- Overrides:
addin classRoaringBitmap- Parameters:
x- integer value
-
add
public void add(int... dat)Description copied from class:RoaringBitmapSet all the specified values to true. This can be expected to be slightly faster than calling "add" repeatedly. The provided integers values don't have to be in sorted order, but it may be preferable to sort them from a performance point of view.- Overrides:
addin classRoaringBitmap- Parameters:
dat- set values
-
add
Deprecated.Description copied from class:RoaringBitmapAdd to the current bitmap all integers in [rangeStart,rangeEnd).- Overrides:
addin classRoaringBitmap- Parameters:
rangeStart- inclusive beginning of rangerangeEnd- exclusive ending of range
-
clear
public void clear()Description copied from class:RoaringBitmapreset to an empty bitmap; result occupies as much space a newly created bitmap.- Overrides:
clearin classRoaringBitmap
-
flip
public void flip(int x)Description copied from class:RoaringBitmapAdd the value if it is not already present, otherwise remove it.- Overrides:
flipin classRoaringBitmap- Parameters:
x- integer value
-
flip
Deprecated.Description copied from class:RoaringBitmapModifies the current bitmap by complementing the bits in the given range, from rangeStart (inclusive) rangeEnd (exclusive).- Overrides:
flipin classRoaringBitmap- Parameters:
rangeStart- inclusive beginning of rangerangeEnd- exclusive ending of range
-
flip
public void flip(long rangeStart, long rangeEnd)Description copied from class:RoaringBitmapModifies the current bitmap by complementing the bits in the given range, from rangeStart (inclusive) rangeEnd (exclusive).- Overrides:
flipin classRoaringBitmap- Parameters:
rangeStart- inclusive beginning of rangerangeEnd- exclusive ending of range
-
and
Description copied from class:RoaringBitmapIn-place bitwise AND (intersection) operation. The current bitmap is modified.- Overrides:
andin classRoaringBitmap- Parameters:
x2- other bitmap
-
andNot
Description copied from class:RoaringBitmapIn-place bitwise ANDNOT (difference) operation. The current bitmap is modified.- Overrides:
andNotin classRoaringBitmap- Parameters:
x2- other bitmap
-
remove
Deprecated.Description copied from class:RoaringBitmapRemove from the current bitmap all integers in [rangeStart,rangeEnd).- Overrides:
removein classRoaringBitmap- Parameters:
rangeStart- inclusive beginning of rangerangeEnd- exclusive ending of range
-
remove
public void remove(int x)Description copied from class:RoaringBitmapIf present remove the specified integer (effectively, sets its bit value to false)- Specified by:
removein interfaceBitmapDataProvider- Overrides:
removein classRoaringBitmap- Parameters:
x- integer value representing the index in a bitmap
-
remove
public void remove(long rangeStart, long rangeEnd)Description copied from class:RoaringBitmapRemove from the current bitmap all integers in [rangeStart,rangeEnd).- Overrides:
removein classRoaringBitmap- Parameters:
rangeStart- inclusive beginning of rangerangeEnd- exclusive ending of range
-
checkedAdd
public boolean checkedAdd(int x)Description copied from class:RoaringBitmapAdd the value to the container (set the value to "true"), whether it already appears or not.- Overrides:
checkedAddin classRoaringBitmap- Parameters:
x- integer value- Returns:
- true if the added int wasn't already contained in the bitmap. False otherwise.
-
checkedRemove
public boolean checkedRemove(int x)Description copied from class:RoaringBitmapIf present remove the specified integer (effectively, sets its bit value to false)- Overrides:
checkedRemovein classRoaringBitmap- Parameters:
x- integer value representing the index in a bitmap- Returns:
- true if the unset bit was already in the bitmap
-
or
Description copied from class:RoaringBitmapIn-place bitwise OR (union) operation. The current bitmap is modified.- Overrides:
orin classRoaringBitmap- Parameters:
x2- other bitmap
-
xor
Description copied from class:RoaringBitmapIn-place bitwise XOR (symmetric difference) operation. The current bitmap is modified.- Overrides:
xorin classRoaringBitmap- Parameters:
x2- other bitmap
-
rankLong
public long rankLong(int x)Description copied from class:RoaringBitmapRank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality()). If you provide the smallest value as a parameter, this function will return 1. If provide a value smaller than the smallest value, it will return 0.- Specified by:
rankLongin interfaceImmutableBitmapDataProvider- Overrides:
rankLongin classRoaringBitmap- Parameters:
x- upper limit- Returns:
- the rank
- See Also:
- Ranking in statistics
-
select
public int select(int j)Description copied from class:RoaringBitmapReturn the jth value stored in this bitmap. The provided value needs to be smaller than the cardinality otherwise an IllegalArgumentException exception is thrown. The smallest value is at index 0. Note that this function differs in convention from the rank function which returns 1 when ranking the smallest value.- Specified by:
selectin interfaceImmutableBitmapDataProvider- Overrides:
selectin classRoaringBitmap- Parameters:
j- index of the value- Returns:
- the value
- See Also:
- Selection algorithm
-
getLongSizeInBytes
public long getLongSizeInBytes()Description copied from class:RoaringBitmapEstimate of the memory usage of this data structure. This can be expected to be within 1% of the true memory usage in common usage scenarios. If exact measures are needed, we recommend using dedicated libraries such as ehcache-sizeofengine. In adversarial cases, this estimate may be 10x the actual memory usage. For example, if you insert a single random value in a bitmap, then over a 100 bytes may be used by the JVM whereas this function may return an estimate of 32 bytes. The same will be true in the "sparse" scenario where you have a small set of random-looking integers spanning a wide range of values. These are considered adversarial cases because, as a general rule, if your data looks like a set of random integers, Roaring bitmaps are probably not the right data structure. Note that you can serialize your Roaring Bitmaps to disk and then construct ImmutableRoaringBitmap instances from a ByteBuffer. In such cases, the Java heap usage will be significantly less than what is reported. If your main goal is to compress arrays of integers, there are other libraries that are maybe more appropriate such as JavaFastPFOR. Note, however, that in general, random integers (as produced by random number generators or hash functions) are not compressible. Trying to compress random data is an adversarial use case.- Specified by:
getLongSizeInBytesin interfaceImmutableBitmapDataProvider- Overrides:
getLongSizeInBytesin classRoaringBitmap- Returns:
- estimated memory usage.
- See Also:
- JavaFastPFOR
-
getIntRankIterator
Get a special iterator that allows .peekNextRank efficiently- Returns:
- iterator with fast rank access
-