Package org.roaringbitmap.longlong
Class Roaring64NavigableMap
- java.lang.Object
-
- org.roaringbitmap.longlong.Roaring64NavigableMap
-
- All Implemented Interfaces:
Externalizable,Serializable,ImmutableLongBitmapDataProvider,LongBitmapDataProvider
public class Roaring64NavigableMap extends Object implements Externalizable, LongBitmapDataProvider
Roaring64NavigableMap extends RoaringBitmap to the whole range of longs (or unsigned longs). It enables a cardinality greater up to Long.MAX_VALUE Longs are added by default in unsigned sorted order (i.e. -1L is the greater long to be added while 0 has no previous value). It can be configured to signed sorted order (in which case, 0 is preceded by 1). That is, they are treated as unsigned integers (see Java 8's Integer.toUnsignedLong function). Up to 4294967296 integers can be stored.- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description Roaring64NavigableMap()By default, we consider longs are unsigned longs: normal longs: 0 is the lowest possible long.Roaring64NavigableMap(boolean signedLongs)By default, use RoaringBitmap as underlyingsBitmapDataProviderRoaring64NavigableMap(boolean signedLongs, boolean cacheCardinalities)By default, use RoaringBitmap as underlyingsBitmapDataProviderRoaring64NavigableMap(boolean signedLongs, boolean cacheCardinalities, BitmapDataProviderSupplier supplier)Roaring64NavigableMap(boolean signedLongs, BitmapDataProviderSupplier supplier)By default, we activating cardinalities caching.Roaring64NavigableMap(BitmapDataProviderSupplier supplier)By default, longs are managed as unsigned longs and cardinalities are cached.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidadd(long... dat)Set all the specified values to true.voidadd(long rangeStart, long rangeEnd)Add to the current bitmap all longs in [rangeStart,rangeEnd).voidaddInt(int x)Add the integer value to the container (set the value to "true"), whether it already appears or not.voidaddLong(long x)Add the value to the container (set the value to "true"), whether it already appears or not.voidand(Roaring64NavigableMap x2)In-place bitwise AND (intersection) operation.voidandNot(Roaring64NavigableMap x2)In-place bitwise ANDNOT (difference) operation.static Roaring64NavigableMapbitmapOf(long... dat)Generate a bitmap with the specified values set to true.voidclear()reset to an empty bitmap; result occupies as much space a newly created bitmap.booleancontains(long x)Checks whether the value in included, which is equivalent to checking if the corresponding bit is set (get in BitSet class).voiddeserialize(DataInput in)Deserialize (retrieve) this bitmap.protected intensureCumulatives(int high)booleanequals(Object obj)voidflip(long x)Add the value if it is not already present, otherwise remove it.voidforEach(LongConsumer lc)Visit all values in the bitmap and pass them to the consumer.intgetIntCardinality()longgetLongCardinality()Returns the number of distinct integers added to the bitmap (e.g., number of bits set).LongIteratorgetLongIterator()For better performance, consider the Use theforEachmethod.longgetLongSizeInBytes()Estimate of the memory usage of this data structure.LongIteratorgetReverseLongIterator()intgetSizeInBytes()Estimate of the memory usage of this data structure.inthashCode()booleanisEmpty()Checks whether the bitmap is empty.Iterator<Long>iterator()For better performance, consider the Use theforEachmethod.ImmutableLongBitmapDataProviderlimit(long x)Create a new bitmap of the same class, containing at most maxcardinality integers.voidor(Roaring64NavigableMap x2)In-place bitwise OR (union) operation.longrankLong(long id)Rank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality()).voidreadExternal(ObjectInput in)voidremoveLong(long x)If present remove the specified integers (effectively, sets its bit value to false)booleanrunOptimize()Use a run-length encoding where it is estimated as more space efficientlongselect(long j)Return the jth value stored in this bitmap.voidserialize(DataOutput out)Serialize this bitmap.longserializedSizeInBytes()Report the number of bytes required to serialize this bitmap.long[]toArray()Return the set values as an array, if the cardinality is smaller than 2147483648.protected LongIteratortoIterator(Iterator<Map.Entry<Integer,BitmapDataProvider>> it, boolean reversed)StringtoString()A string describing the bitmap.voidtrim()Recover allocated but unused memory.voidwriteExternal(ObjectOutput out)Roaring64NavigableMapare serializable.voidxor(Roaring64NavigableMap x2)In-place bitwise XOR (symmetric difference) operation.
-
-
-
Constructor Detail
-
Roaring64NavigableMap
public Roaring64NavigableMap()
By default, we consider longs are unsigned longs: normal longs: 0 is the lowest possible long. Long.MAX_VALUE is followed by Long.MIN_VALUE. -1L is the highest possible value
-
Roaring64NavigableMap
public Roaring64NavigableMap(boolean signedLongs)
By default, use RoaringBitmap as underlyingsBitmapDataProvider- Parameters:
signedLongs- true if longs has to be ordered as plain java longs. False to handle them as unsigned 64bits long (as RoaringBitmap with unsigned integers)
-
Roaring64NavigableMap
public Roaring64NavigableMap(boolean signedLongs, boolean cacheCardinalities)By default, use RoaringBitmap as underlyingsBitmapDataProvider- Parameters:
signedLongs- true if longs has to be ordered as plain java longs. False to handle them as unsigned 64bits long (as RoaringBitmap with unsigned integers)cacheCardinalities- true if cardinalities have to be cached. It will prevent many iteration along the NavigableMap
-
Roaring64NavigableMap
public Roaring64NavigableMap(BitmapDataProviderSupplier supplier)
By default, longs are managed as unsigned longs and cardinalities are cached.- Parameters:
supplier- provide the logic to instantiate newBitmapDataProvider, typically instantiated once per high.
-
Roaring64NavigableMap
public Roaring64NavigableMap(boolean signedLongs, BitmapDataProviderSupplier supplier)By default, we activating cardinalities caching.- Parameters:
signedLongs- true if longs has to be ordered as plain java longs. False to handle them as unsigned 64bits long (as RoaringBitmap with unsigned integers)supplier- provide the logic to instantiate newBitmapDataProvider, typically instantiated once per high.
-
Roaring64NavigableMap
public Roaring64NavigableMap(boolean signedLongs, boolean cacheCardinalities, BitmapDataProviderSupplier supplier)- Parameters:
signedLongs- true if longs has to be ordered as plain java longs. False to handle them as unsigned 64bits long (as RoaringBitmap with unsigned integers)cacheCardinalities- true if cardinalities have to be cached. It will prevent many iteration along the NavigableMapsupplier- provide the logic to instantiate newBitmapDataProvider, typically instantiated once per high.
-
-
Method Detail
-
addLong
public void addLong(long x)
Add the value to the container (set the value to "true"), whether it already appears or not. Java lacks native unsigned longs but the x argument is considered to be unsigned. Within bitmaps, numbers are ordered according toLong.compareUnsigned(long, long). We order the numbers like 0, 1, ..., 9223372036854775807, -9223372036854775808, -9223372036854775807,..., -1.- Specified by:
addLongin interfaceLongBitmapDataProvider- Parameters:
x- long value
-
addInt
public void addInt(int x)
Add the integer value to the container (set the value to "true"), whether it already appears or not. Javac 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.- Parameters:
x- integer value
-
getLongCardinality
public long getLongCardinality()
Returns the number of distinct integers added to the bitmap (e.g., number of bits set).- Specified by:
getLongCardinalityin interfaceImmutableLongBitmapDataProvider- Returns:
- the cardinality
-
getIntCardinality
public int getIntCardinality() throws UnsupportedOperationException- Returns:
- the cardinality as an int
- Throws:
UnsupportedOperationException- if the cardinality does not fit in an int
-
select
public long select(long j) throws IllegalArgumentExceptionReturn the jth value stored in this bitmap.- Specified by:
selectin interfaceImmutableLongBitmapDataProvider- Parameters:
j- index of the value- Returns:
- the value
- Throws:
IllegalArgumentException- if j is out of the bounds of the bitmap cardinality
-
iterator
public Iterator<Long> iterator()
For better performance, consider the Use theforEachmethod.- Returns:
- a custom iterator over set bits, the bits are traversed in ascending sorted order
-
forEach
public void forEach(LongConsumer lc)
Description copied from interface:ImmutableLongBitmapDataProviderVisit all values in the bitmap and pass them to the consumer. * Usage:bitmap.forEach(new LongConsumer() { {@literal @}Override public void accept(long value) { // do something here }});}- Specified by:
forEachin interfaceImmutableLongBitmapDataProvider- Parameters:
lc- the consumer
-
rankLong
public long rankLong(long id)
Description copied from interface:ImmutableLongBitmapDataProviderRank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality()). The value is a full 64-bit value.- Specified by:
rankLongin interfaceImmutableLongBitmapDataProvider- Parameters:
id- upper limit- Returns:
- the rank
-
ensureCumulatives
protected int ensureCumulatives(int high)
- Parameters:
high- for which high bucket should we compute the cardinality- Returns:
- the highest validatedIndex
-
or
public void or(Roaring64NavigableMap x2)
In-place bitwise OR (union) operation. The current bitmap is modified.- Parameters:
x2- other bitmap
-
xor
public void xor(Roaring64NavigableMap x2)
In-place bitwise XOR (symmetric difference) operation. The current bitmap is modified.- Parameters:
x2- other bitmap
-
and
public void and(Roaring64NavigableMap x2)
In-place bitwise AND (intersection) operation. The current bitmap is modified.- Parameters:
x2- other bitmap
-
andNot
public void andNot(Roaring64NavigableMap x2)
In-place bitwise ANDNOT (difference) operation. The current bitmap is modified.- Parameters:
x2- other bitmap
-
writeExternal
public void writeExternal(ObjectOutput out) throws IOException
Roaring64NavigableMapare serializable. However, contrary to RoaringBitmap, the serialization format is not well-defined: for now, it is strongly coupled with Java standard serialization. Just like the serialization may be incompatible between various Java versions,Roaring64NavigableMapare subject to incompatibilities. Moreover, even on a given Java versions, the serialization format may change from one RoaringBitmap version to another- Specified by:
writeExternalin interfaceExternalizable- Throws:
IOException
-
readExternal
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
- Specified by:
readExternalin interfaceExternalizable- Throws:
IOExceptionClassNotFoundException
-
toString
public String toString()
A string describing the bitmap.
-
getLongIterator
public LongIterator getLongIterator()
For better performance, consider the Use theforEachmethod.- Specified by:
getLongIteratorin interfaceImmutableLongBitmapDataProvider- Returns:
- a custom iterator over set bits, the bits are traversed in ascending sorted order
-
toIterator
protected LongIterator toIterator(Iterator<Map.Entry<Integer,BitmapDataProvider>> it, boolean reversed)
-
contains
public boolean contains(long x)
Description copied from interface:ImmutableLongBitmapDataProviderChecks whether the value in included, which is equivalent to checking if the corresponding bit is set (get in BitSet class).- Specified by:
containsin interfaceImmutableLongBitmapDataProvider- Parameters:
x- long value- Returns:
- whether the long value is included.
-
getSizeInBytes
public int getSizeInBytes()
Description copied from interface:ImmutableLongBitmapDataProviderEstimate of the memory usage of this data structure. Internally, this is computed as a 64-bit counter.- Specified by:
getSizeInBytesin interfaceImmutableLongBitmapDataProvider- Returns:
- estimated memory usage.
-
getLongSizeInBytes
public long getLongSizeInBytes()
Description copied from interface:ImmutableLongBitmapDataProviderEstimate of the memory usage of this data structure. Provides full 64-bit number.- Specified by:
getLongSizeInBytesin interfaceImmutableLongBitmapDataProvider- Returns:
- estimated memory usage.
-
isEmpty
public boolean isEmpty()
Description copied from interface:ImmutableLongBitmapDataProviderChecks whether the bitmap is empty.- Specified by:
isEmptyin interfaceImmutableLongBitmapDataProvider- Returns:
- true if this bitmap contains no set bit
-
limit
public ImmutableLongBitmapDataProvider limit(long x)
Description copied from interface:ImmutableLongBitmapDataProviderCreate a new bitmap of the same class, containing at most maxcardinality integers.- Specified by:
limitin interfaceImmutableLongBitmapDataProvider- Parameters:
x- maximal cardinality- Returns:
- a new bitmap with cardinality no more than maxcardinality
-
runOptimize
public boolean runOptimize()
Use a run-length encoding where it is estimated as more space efficient- Returns:
- whether a change was applied
-
serialize
public void serialize(DataOutput out) throws IOException
Serialize this bitmap. Unlike RoaringBitmap, there is no specification for now: it may change from onve java version to another, and from one RoaringBitmap version to another. Consider callingrunOptimize()before serialization to improve compression. The current bitmap is not modified.- Specified by:
serializein interfaceImmutableLongBitmapDataProvider- Parameters:
out- the DataOutput stream- Throws:
IOException- Signals that an I/O exception has occurred.
-
deserialize
public void deserialize(DataInput in) throws IOException
Deserialize (retrieve) this bitmap. Unlike RoaringBitmap, there is no specification for now: it may change from one java version to another, and from one RoaringBitmap version to another. The current bitmap is overwritten.- Parameters:
in- the DataInput stream- Throws:
IOException- Signals that an I/O exception has occurred.
-
serializedSizeInBytes
public long serializedSizeInBytes()
Description copied from interface:ImmutableLongBitmapDataProviderReport the number of bytes required to serialize this bitmap. This is the number of bytes written out when using the serialize method. When using the writeExternal method, the count will be higher due to the overhead of Java serialization.- Specified by:
serializedSizeInBytesin interfaceImmutableLongBitmapDataProvider- Returns:
- the size in bytes
-
clear
public void clear()
reset to an empty bitmap; result occupies as much space a newly created bitmap.
-
toArray
public long[] toArray()
Return the set values as an array, if the cardinality is smaller than 2147483648. The long values are in sorted order.- Specified by:
toArrayin interfaceImmutableLongBitmapDataProvider- Returns:
- array representing the set values.
-
bitmapOf
public static Roaring64NavigableMap bitmapOf(long... dat)
Generate a bitmap with the specified values set to true. The provided longs values don't have to be in sorted order, but it may be preferable to sort them from a performance point of view.- Parameters:
dat- set values- Returns:
- a new bitmap
-
add
public void add(long... dat)
Set 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.- Parameters:
dat- set values
-
add
public void add(long rangeStart, long rangeEnd)Add to the current bitmap all longs in [rangeStart,rangeEnd).- Parameters:
rangeStart- inclusive beginning of rangerangeEnd- exclusive ending of range
-
getReverseLongIterator
public LongIterator getReverseLongIterator()
- Specified by:
getReverseLongIteratorin interfaceImmutableLongBitmapDataProvider- Returns:
- a custom iterator over set bits, the bits are traversed in descending sorted order
-
removeLong
public void removeLong(long x)
Description copied from interface:LongBitmapDataProviderIf present remove the specified integers (effectively, sets its bit value to false)- Specified by:
removeLongin interfaceLongBitmapDataProvider- Parameters:
x- long value representing the index in a bitmap
-
trim
public void trim()
Description copied from interface:LongBitmapDataProviderRecover allocated but unused memory.- Specified by:
trimin interfaceLongBitmapDataProvider
-
flip
public void flip(long x)
Add the value if it is not already present, otherwise remove it.- Parameters:
x- long value
-
-