public class ImmutableRoaringBitmap extends Object implements Iterable<Integer>, Cloneable, ImmutableBitmapDataProvider
import org.roaringbitmap.buffer.*;
//...
MutableRoaringBitmap rr1 = MutableRoaringBitmap.bitmapOf(1, 2, 3, 1000);
MutableRoaringBitmap rr2 = MutableRoaringBitmap.bitmapOf( 2, 3, 1010);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
// could call "rr1.runOptimize()" and "rr2.runOptimize" if there
// there were runs to compress
rr1.serialize(dos);
rr2.serialize(dos);
dos.close();
ByteBuffer bb = ByteBuffer.wrap(bos.toByteArray());
ImmutableRoaringBitmap rrback1 = new ImmutableRoaringBitmap(bb);
bb.position(bb.position() + rrback1.serializedSizeInBytes());
ImmutableRoaringBitmap rrback2 = new ImmutableRoaringBitmap(bb);
It can also be constructed from a ByteBuffer (useful for memory mapping).
Objects of this class may reside almost entirely in memory-map files.MutableRoaringBitmap| Modifier | Constructor and Description |
|---|---|
protected |
ImmutableRoaringBitmap() |
|
ImmutableRoaringBitmap(ByteBuffer b)
Constructs a new ImmutableRoaringBitmap starting at this ByteBuffer's position().
|
| Modifier and Type | Method and Description |
|---|---|
static MutableRoaringBitmap |
and(ImmutableRoaringBitmap x1,
ImmutableRoaringBitmap x2)
Bitwise AND (intersection) operation.
|
static MutableRoaringBitmap |
andNot(ImmutableRoaringBitmap x1,
ImmutableRoaringBitmap x2)
Bitwise ANDNOT (difference) operation.
|
ImmutableRoaringBitmap |
clone() |
boolean |
contains(int x)
Checks whether the value in included, which is equivalent to checking if
the corresponding bit is set (get in BitSet class).
|
boolean |
equals(Object o) |
static MutableRoaringBitmap |
flip(ImmutableRoaringBitmap bm,
int rangeStart,
int rangeEnd)
Complements the bits in the given range, from rangeStart (inclusive)
rangeEnd (exclusive).
|
int |
getCardinality()
Returns the number of distinct integers added to the bitmap (e.g., number
of bits set).
|
IntIterator |
getIntIterator() |
IntIterator |
getReverseIntIterator() |
int |
getSizeInBytes()
Estimate of the memory usage of this data structure.
|
int |
hashCode() |
boolean |
hasRunCompression()
Check whether this bitmap has had its runs compressed.
|
static boolean |
intersects(ImmutableRoaringBitmap x1,
ImmutableRoaringBitmap x2)
Checks whether the two bitmaps intersect.
|
boolean |
isEmpty()
Checks whether the bitmap is empty.
|
Iterator<Integer> |
iterator()
iterate over the positions of the true values.
|
protected static MutableRoaringBitmap |
lazyor(ImmutableRoaringBitmap x1,
ImmutableRoaringBitmap x2) |
MutableRoaringBitmap |
limit(int maxcardinality)
Create a new Roaring bitmap containing at most maxcardinality integers.
|
static MutableRoaringBitmap |
or(ImmutableRoaringBitmap... bitmaps)
Compute overall OR between bitmaps.
|
static MutableRoaringBitmap |
or(ImmutableRoaringBitmap x1,
ImmutableRoaringBitmap x2)
Bitwise OR (union) operation.
|
static MutableRoaringBitmap |
or(Iterator bitmaps)
Compute overall AND between bitmaps.
|
int |
rank(int x)
Rank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality()).
|
int |
select(int j)
Return the jth value stored in this bitmap.
|
void |
serialize(DataOutput out)
Serialize this bitmap.
|
int |
serializedSizeInBytes()
Report the number of bytes required for serialization.
|
int[] |
toArray()
Return the set values as an array.
|
MutableRoaringBitmap |
toMutableRoaringBitmap()
Copies the content of this bitmap to a bitmap that can be modified.
|
String |
toString()
A string describing the bitmap.
|
static MutableRoaringBitmap |
xor(ImmutableRoaringBitmap x1,
ImmutableRoaringBitmap x2)
Bitwise XOR (symmetric difference) operation.
|
finalize, getClass, notify, notifyAll, wait, wait, waitforEach, spliteratorprotected ImmutableRoaringBitmap()
public ImmutableRoaringBitmap(ByteBuffer b)
b - data sourcepublic static MutableRoaringBitmap and(ImmutableRoaringBitmap x1, ImmutableRoaringBitmap x2)
x1 - first bitmapx2 - other bitmapBufferFastAggregation.and(ImmutableRoaringBitmap...)public static MutableRoaringBitmap andNot(ImmutableRoaringBitmap x1, ImmutableRoaringBitmap x2)
x1 - first bitmapx2 - other bitmappublic static MutableRoaringBitmap flip(ImmutableRoaringBitmap bm, int rangeStart, int rangeEnd)
bm - bitmap being negatedrangeStart - inclusive beginning of rangerangeEnd - exclusive ending of rangepublic static MutableRoaringBitmap or(ImmutableRoaringBitmap x1, ImmutableRoaringBitmap x2)
x1 - first bitmapx2 - other bitmapBufferFastAggregation.or(ImmutableRoaringBitmap...),
BufferFastAggregation.horizontal_or(ImmutableRoaringBitmap...)protected static MutableRoaringBitmap lazyor(ImmutableRoaringBitmap x1, ImmutableRoaringBitmap x2)
public static MutableRoaringBitmap xor(ImmutableRoaringBitmap x1, ImmutableRoaringBitmap x2)
x1 - first bitmapx2 - other bitmapBufferFastAggregation.xor(ImmutableRoaringBitmap...),
BufferFastAggregation.horizontal_xor(ImmutableRoaringBitmap...)public ImmutableRoaringBitmap clone()
public boolean contains(int x)
contains in interface ImmutableBitmapDataProviderx - integer valuepublic int getCardinality()
getCardinality in interface ImmutableBitmapDataProviderpublic boolean isEmpty()
isEmpty in interface ImmutableBitmapDataProviderpublic IntIterator getIntIterator()
getIntIterator in interface ImmutableBitmapDataProviderpublic IntIterator getReverseIntIterator()
getReverseIntIterator in interface ImmutableBitmapDataProviderpublic int getSizeInBytes()
getSizeInBytes in interface ImmutableBitmapDataProviderpublic static MutableRoaringBitmap or(ImmutableRoaringBitmap... bitmaps)
BufferFastAggregation.or(org.roaringbitmap.buffer.MutableRoaringBitmap...))bitmaps - input bitmapspublic static MutableRoaringBitmap or(Iterator bitmaps)
BufferFastAggregation.or(org.roaringbitmap.buffer.MutableRoaringBitmap...))bitmaps - input bitmapspublic void serialize(DataOutput out) throws IOException
MutableRoaringBitmap.runOptimize() before serialization to
improve compression if this is a MutableRoaringBitmap instance.
The current bitmap is not modified.
Advanced example: To serialize your bitmap to a ByteBuffer,
you can do the following.
//r is your bitmap
// r.runOptimize(); // might improve compression, only if you have a
// MutableRoaringBitmap instance.
// next we create the ByteBuffer where the data will be stored
ByteBuffer outbb = ByteBuffer.allocate(r.serializedSizeInBytes());
// then we can serialize on a custom OutputStream
mrb.serialize(new DataOutputStream(new OutputStream(){
ByteBuffer mBB;
OutputStream init(ByteBuffer mbb) {mBB=mbb; return this;}
public void close() {}
public void flush() {}
public void write(int b) {
mBB.put((byte) b);}
public void write(byte[] b) {mBB.put(b);}
public void write(byte[] b, int off, int l) {mBB.put(b,off,l);}
}.init(outbb)));
// outbuff will now contain a serialized version of your bitmap
Note: Java's data structures are in big endian format. Roaring
serializes to a little endian format, so the bytes are flipped
by the library during serialization to ensure that what is stored
is in little endian---despite Java's big endianness. You can defeat
this process by reflipping the bytes again in a custom DataOutput which
could lead to serialized Roaring objects with an incorrect byte order.serialize in interface ImmutableBitmapDataProviderout - the DataOutput streamIOException - Signals that an I/O exception has occurred.public boolean hasRunCompression()
public static boolean intersects(ImmutableRoaringBitmap x1, ImmutableRoaringBitmap x2)
x1 - first bitmapx2 - other bitmappublic int serializedSizeInBytes()
serializedSizeInBytes in interface ImmutableBitmapDataProviderpublic int[] toArray()
toArray in interface ImmutableBitmapDataProviderpublic MutableRoaringBitmap toMutableRoaringBitmap()
public String toString()
public int rank(int x)
rank in interface ImmutableBitmapDataProviderx - upper limitpublic int select(int j)
select in interface ImmutableBitmapDataProviderj - index of the valuepublic MutableRoaringBitmap limit(int maxcardinality)
limit in interface ImmutableBitmapDataProvidermaxcardinality - maximal cardinalityCopyright © 2015. All Rights Reserved.