Package org.roaringbitmap
Class ArrayContainer
- java.lang.Object
-
- org.roaringbitmap.Container
-
- org.roaringbitmap.ArrayContainer
-
- All Implemented Interfaces:
Externalizable
,Serializable
,Cloneable
,Iterable<Short>
,WordStorage<Container>
public final class ArrayContainer extends Container implements Cloneable
Simple container made of an array of 16-bit integers- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected int
cardinality
-
Fields inherited from class org.roaringbitmap.Container
ContainerNames
-
-
Constructor Summary
Constructors Modifier Constructor Description ArrayContainer()
Create an array container with default capacityArrayContainer(int capacity)
Create an array container with specified capacityArrayContainer(int firstOfRun, int lastOfRun)
Create an array container with a run of ones from firstOfRun to lastOfRun, inclusive.ArrayContainer(int newCard, short[] newContent)
Create a new container from existing values array.protected
ArrayContainer(short[] newContent)
ArrayContainer(MappeableArrayContainer bc)
Creates a new non-mappeable container from a mappeable one.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Container
add(int begin, int end)
Return a new container with all shorts in [begin,end) added using an unsigned interpretation.Container
add(short x)
running time is in O(n) time if insert is not in order.ArrayContainer
and(ArrayContainer value2)
Computes the bitwise AND of this container with another (intersection).Container
and(BitmapContainer x)
Computes the bitwise AND of this container with another (intersection).Container
and(RunContainer x)
Computes the bitwise AND of this container with another (intersection).int
andCardinality(ArrayContainer value2)
int
andCardinality(BitmapContainer x)
int
andCardinality(RunContainer x)
ArrayContainer
andNot(ArrayContainer value2)
Computes the bitwise ANDNOT of this container with another (difference).ArrayContainer
andNot(BitmapContainer value2)
Computes the bitwise ANDNOT of this container with another (difference).ArrayContainer
andNot(RunContainer x)
Computes the bitwise ANDNOT of this container with another (difference).void
clear()
Empties the containerArrayContainer
clone()
boolean
contains(int minimum, int supremum)
Checks whether the container contains the entire rangeboolean
contains(short x)
Checks whether the contain contains the provided valueprotected boolean
contains(ArrayContainer arrayContainer)
protected boolean
contains(BitmapContainer bitmapContainer)
protected boolean
contains(RunContainer runContainer)
void
deserialize(DataInput in)
Deserialize (recover) the container.static ArrayContainer
empty()
boolean
equals(Object o)
void
fillLeastSignificant16bits(int[] x, int i, int mask)
Fill the least significant 16 bits of the integer array, starting at index i, with the short values from this container.int
first()
Get the first integer held in the containerContainer
flip(short x)
Add a short to the container if it is not present, otherwise remove it.void
forEach(short msb, IntConsumer ic)
Iterate through the values of this container and pass them along to the IntConsumer, using msb as the 16 most significant bits.protected int
getArraySizeInBytes()
Size of the underlying arrayContainerBatchIterator
getBatchIterator()
Gets an iterator to visit the contents of the container in batchesint
getCardinality()
Computes the distinct number of short values in the container.ShortIterator
getReverseShortIterator()
Iterator to visit the short values in the container in descending order.PeekableShortIterator
getShortIterator()
Iterator to visit the short values in the container in ascending order.PeekableShortRankIterator
getShortRankIterator()
Iterator to visit the short values in container and pre-compute ranksint
getSizeInBytes()
Computes an estimate of the memory usage of this container.int
hashCode()
Container
iadd(int begin, int end)
Add all shorts in [begin,end) using an unsigned interpretation.ArrayContainer
iand(ArrayContainer value2)
Computes the in-place bitwise AND of this container with another (intersection).Container
iand(BitmapContainer value2)
Computes the in-place bitwise AND of this container with another (intersection).Container
iand(RunContainer x)
Computes the in-place bitwise AND of this container with another (intersection).ArrayContainer
iandNot(ArrayContainer value2)
Computes the in-place bitwise ANDNOT of this container with another (difference).ArrayContainer
iandNot(BitmapContainer value2)
Computes the in-place bitwise ANDNOT of this container with another (difference).Container
iandNot(RunContainer x)
Computes the in-place bitwise ANDNOT of this container with another (difference).Container
inot(int firstOfRange, int lastOfRange)
Computes the in-place bitwise NOT of this container (complement).boolean
intersects(int minimum, int supremum)
Checks if the container intersects with a rangeboolean
intersects(ArrayContainer value2)
Returns true if the current container intersects the other container.boolean
intersects(BitmapContainer x)
Returns true if the current container intersects the other container.boolean
intersects(RunContainer x)
Returns true if the current container intersects the other container.Container
ior(ArrayContainer value2)
Computes the in-place bitwise OR of this container with another (union).Container
ior(BitmapContainer x)
Computes the in-place bitwise OR of this container with another (union).Container
ior(RunContainer x)
Computes the in-place bitwise OR of this container with another (union).Container
iremove(int begin, int end)
Remove shorts in [begin,end) using an unsigned interpretation.boolean
isEmpty()
Checks whether the container is empty or not.Iterator<Short>
iterator()
Container
ixor(ArrayContainer value2)
Computes the in-place bitwise XOR of this container with another (symmetric difference).Container
ixor(BitmapContainer x)
Computes the in-place bitwise XOR of this container with another (symmetric difference).Container
ixor(RunContainer x)
Computes the in-place bitwise XOR of this container with another (symmetric difference).int
last()
Get the last integer held in the containerprotected Container
lazyor(ArrayContainer value2)
Container
limit(int maxcardinality)
Create a new Container containing at most maxcardinality integers.protected void
loadData(BitmapContainer bitmapContainer)
int
nextAbsentValue(short fromValue)
Gets the first absent value greater than or equal to the lower bound.int
nextValue(short fromValue)
Gets the first value greater than or equal to the lower bound, or -1 if no such value exists.Container
not(int firstOfRange, int lastOfRange)
Computes the bitwise NOT of this container (complement).Container
or(ArrayContainer value2)
Computes the bitwise OR of this container with another (union).Container
or(BitmapContainer x)
Computes the bitwise OR of this container with another (union).Container
or(RunContainer x)
Computes the bitwise OR of this container with another (union).protected Container
or(ShortIterator it)
int
previousAbsentValue(short fromValue)
Gets the last value less than or equal to the upper bound.int
previousValue(short fromValue)
Gets the last value less than or equal to the upper bound, or -1 if no such value exists.int
rank(short lowbits)
Rank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality()).void
readExternal(ObjectInput in)
Container
remove(int begin, int end)
Return a new container with all shorts in [begin,end) remove using an unsigned interpretation.Container
remove(short x)
Remove the short from this container.protected void
removeAtIndex(int loc)
Container
repairAfterLazy()
The output of a lazyOR or lazyIOR might be an invalid container, this should be called on it.Container
runOptimize()
Convert to RunContainers, when the result is smaller.short
select(int j)
Return the jth valuevoid
serialize(DataOutput out)
Serialize the container.int
serializedSizeInBytes()
Report the number of bytes required to serialize this container.protected static int
serializedSizeInBytes(int cardinality)
BitmapContainer
toBitmapContainer()
Copies the data in a bitmap container.MappeableContainer
toMappeableContainer()
Convert to a mappeable container.ShortBuffer
toShortBuffer()
Return the content of this container as a ShortBuffer.String
toString()
void
trim()
If possible, recover wasted memory.protected void
writeArray(DataOutput out)
Write just the underlying array.protected void
writeArray(ByteBuffer buffer)
Write just the underlying array.void
writeExternal(ObjectOutput out)
Container
xor(ArrayContainer value2)
Computes the bitwise XOR of this container with another (symmetric difference).Container
xor(BitmapContainer x)
Computes the bitwise XOR of this container with another (symmetric difference).Container
xor(RunContainer x)
Computes the bitwise XOR of this container with another (symmetric difference).protected Container
xor(ShortIterator it)
-
Methods inherited from class org.roaringbitmap.Container
and, andCardinality, andNot, assertNonEmpty, contains, getContainerName, iand, iandNot, intersects, ior, ixor, lazyIOR, lazyOR, or, rangeOfOnes, xor, xorCardinality
-
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
-
-
-
Constructor Detail
-
ArrayContainer
public ArrayContainer()
Create an array container with default capacity
-
ArrayContainer
public ArrayContainer(int capacity)
Create an array container with specified capacity- Parameters:
capacity
- The capacity of the container
-
ArrayContainer
public ArrayContainer(int firstOfRun, int lastOfRun)
Create an array container with a run of ones from firstOfRun to lastOfRun, inclusive. Caller is responsible for making sure the range is small enough that ArrayContainer is appropriate.- Parameters:
firstOfRun
- first indexlastOfRun
- last index (range is exclusive)
-
ArrayContainer
public ArrayContainer(int newCard, short[] newContent)
Create a new container from existing values array. This copies the data.- Parameters:
newCard
- desired cardinalitynewContent
- actual values (length should equal or exceed cardinality)
-
ArrayContainer
public ArrayContainer(MappeableArrayContainer bc)
Creates a new non-mappeable container from a mappeable one. This copies the data.- Parameters:
bc
- the original container
-
ArrayContainer
protected ArrayContainer(short[] newContent)
-
-
Method Detail
-
serializedSizeInBytes
protected static int serializedSizeInBytes(int cardinality)
-
empty
public static ArrayContainer empty()
-
add
public Container add(int begin, int end)
Description copied from class:Container
Return a new container with all shorts in [begin,end) added using an unsigned interpretation.
-
add
public Container add(short x)
running time is in O(n) time if insert is not in order.- Specified by:
add
in interfaceWordStorage<Container>
- Specified by:
add
in classContainer
- Parameters:
x
- short to be added- Returns:
- the new container
-
and
public ArrayContainer and(ArrayContainer value2)
Description copied from class:Container
Computes the bitwise AND of this container with another (intersection). This container as well as the provided container are left unaffected.
-
and
public Container and(BitmapContainer x)
Description copied from class:Container
Computes the bitwise AND of this container with another (intersection). This container as well as the provided container are left unaffected.
-
and
public Container and(RunContainer x)
Description copied from class:Container
Computes the bitwise AND of this container with another (intersection). This container as well as the provided container are left unaffected.
-
andCardinality
public int andCardinality(ArrayContainer value2)
- Specified by:
andCardinality
in classContainer
-
andCardinality
public int andCardinality(BitmapContainer x)
- Specified by:
andCardinality
in classContainer
-
andCardinality
public int andCardinality(RunContainer x)
- Specified by:
andCardinality
in classContainer
-
andNot
public ArrayContainer andNot(ArrayContainer value2)
Description copied from class:Container
Computes the bitwise ANDNOT of this container with another (difference). This container as well as the provided container are left unaffected.
-
andNot
public ArrayContainer andNot(BitmapContainer value2)
Description copied from class:Container
Computes the bitwise ANDNOT of this container with another (difference). This container as well as the provided container are left unaffected.
-
andNot
public ArrayContainer andNot(RunContainer x)
Description copied from class:Container
Computes the bitwise ANDNOT of this container with another (difference). This container as well as the provided container are left unaffected.
-
clear
public void clear()
Description copied from class:Container
Empties the container
-
clone
public ArrayContainer clone()
-
isEmpty
public boolean isEmpty()
Description copied from class:Container
Checks whether the container is empty or not.- Specified by:
isEmpty
in interfaceWordStorage<Container>
- Specified by:
isEmpty
in classContainer
- Returns:
- true if the container is empty.
-
contains
public boolean contains(short x)
Description copied from class:Container
Checks whether the contain contains the provided value
-
contains
public boolean contains(int minimum, int supremum)
Description copied from class:Container
Checks whether the container contains the entire range
-
contains
protected boolean contains(RunContainer runContainer)
-
contains
protected boolean contains(ArrayContainer arrayContainer)
-
contains
protected boolean contains(BitmapContainer bitmapContainer)
-
deserialize
public void deserialize(DataInput in) throws IOException
Description copied from class:Container
Deserialize (recover) the container.- Specified by:
deserialize
in classContainer
- Parameters:
in
- the DataInput stream- Throws:
IOException
- Signals that an I/O exception has occurred.
-
fillLeastSignificant16bits
public void fillLeastSignificant16bits(int[] x, int i, int mask)
Description copied from class:Container
Fill the least significant 16 bits of the integer array, starting at index i, with the short values from this container. The caller is responsible to allocate enough room. The most significant 16 bits of each integer are given by the most significant bits of the provided mask.- Specified by:
fillLeastSignificant16bits
in classContainer
- Parameters:
x
- provided arrayi
- starting indexmask
- indicates most significant bits
-
flip
public Container flip(short x)
Description copied from class:Container
Add a short to the container if it is not present, otherwise remove it. May generate a new container.
-
getArraySizeInBytes
protected int getArraySizeInBytes()
Description copied from class:Container
Size of the underlying array- Specified by:
getArraySizeInBytes
in classContainer
- Returns:
- size in bytes
-
getCardinality
public int getCardinality()
Description copied from class:Container
Computes the distinct number of short values in the container. Can be expected to run in constant time.- Specified by:
getCardinality
in classContainer
- Returns:
- the cardinality
-
getReverseShortIterator
public ShortIterator getReverseShortIterator()
Description copied from class:Container
Iterator to visit the short values in the container in descending order.- Specified by:
getReverseShortIterator
in classContainer
- Returns:
- iterator
-
getShortIterator
public PeekableShortIterator getShortIterator()
Description copied from class:Container
Iterator to visit the short values in the container in ascending order.- Specified by:
getShortIterator
in classContainer
- Returns:
- iterator
-
getShortRankIterator
public PeekableShortRankIterator getShortRankIterator()
Description copied from class:Container
Iterator to visit the short values in container and pre-compute ranks- Specified by:
getShortRankIterator
in classContainer
- Returns:
- iterator
-
getBatchIterator
public ContainerBatchIterator getBatchIterator()
Description copied from class:Container
Gets an iterator to visit the contents of the container in batches- Specified by:
getBatchIterator
in classContainer
- Returns:
- iterator
-
getSizeInBytes
public int getSizeInBytes()
Description copied from class:Container
Computes an estimate of the memory usage of this container. The estimate is not meant to be exact.- Specified by:
getSizeInBytes
in classContainer
- Returns:
- estimated memory usage in bytes
-
iadd
public Container iadd(int begin, int end)
Description copied from class:Container
Add all shorts in [begin,end) using an unsigned interpretation. May generate a new container.
-
iand
public ArrayContainer iand(ArrayContainer value2)
Description copied from class:Container
Computes the in-place bitwise AND of this container with another (intersection). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
-
iand
public Container iand(BitmapContainer value2)
Description copied from class:Container
Computes the in-place bitwise AND of this container with another (intersection). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
-
iand
public Container iand(RunContainer x)
Description copied from class:Container
Computes the in-place bitwise AND of this container with another (intersection). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
-
iandNot
public ArrayContainer iandNot(ArrayContainer value2)
Description copied from class:Container
Computes the in-place bitwise ANDNOT of this container with another (difference). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
-
iandNot
public ArrayContainer iandNot(BitmapContainer value2)
Description copied from class:Container
Computes the in-place bitwise ANDNOT of this container with another (difference). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
-
iandNot
public Container iandNot(RunContainer x)
Description copied from class:Container
Computes the in-place bitwise ANDNOT of this container with another (difference). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
-
inot
public Container inot(int firstOfRange, int lastOfRange)
Description copied from class:Container
Computes the in-place bitwise NOT of this container (complement). Only those bits within the range are affected. The current container is generally modified. May generate a new container.
-
intersects
public boolean intersects(ArrayContainer value2)
Description copied from class:Container
Returns true if the current container intersects the other container.- Specified by:
intersects
in classContainer
- Parameters:
value2
- other container- Returns:
- whether they intersect
-
intersects
public boolean intersects(BitmapContainer x)
Description copied from class:Container
Returns true if the current container intersects the other container.- Specified by:
intersects
in classContainer
- Parameters:
x
- other container- Returns:
- whether they intersect
-
intersects
public boolean intersects(RunContainer x)
Description copied from class:Container
Returns true if the current container intersects the other container.- Specified by:
intersects
in classContainer
- Parameters:
x
- other container- Returns:
- whether they intersect
-
intersects
public boolean intersects(int minimum, int supremum)
Description copied from class:Container
Checks if the container intersects with a range- Specified by:
intersects
in classContainer
- Parameters:
minimum
- the inclusive unsigned lower bound of the rangesupremum
- the exclusive unsigned upper bound of the range- Returns:
- true if the container intersects the range
-
ior
public Container ior(ArrayContainer value2)
Description copied from class:Container
Computes the in-place bitwise OR of this container with another (union). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
-
ior
public Container ior(BitmapContainer x)
Description copied from class:Container
Computes the in-place bitwise OR of this container with another (union). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
-
ior
public Container ior(RunContainer x)
Description copied from class:Container
Computes the in-place bitwise OR of this container with another (union). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
-
iremove
public Container iremove(int begin, int end)
Description copied from class:Container
Remove shorts in [begin,end) using an unsigned interpretation. May generate a new container.
-
ixor
public Container ixor(ArrayContainer value2)
Description copied from class:Container
Computes the in-place bitwise XOR of this container with another (symmetric difference). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
-
ixor
public Container ixor(BitmapContainer x)
Description copied from class:Container
Computes the in-place bitwise XOR of this container with another (symmetric difference). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
-
ixor
public Container ixor(RunContainer x)
Description copied from class:Container
Computes the in-place bitwise XOR of this container with another (symmetric difference). The current container is generally modified, whereas the provided container (x) is unaffected. May generate a new container.
-
limit
public Container limit(int maxcardinality)
Description copied from class:Container
Create a new Container containing at most maxcardinality integers.
-
loadData
protected void loadData(BitmapContainer bitmapContainer)
-
not
public Container not(int firstOfRange, int lastOfRange)
Description copied from class:Container
Computes the bitwise NOT of this container (complement). Only those bits within the range are affected. The current container is left unaffected.
-
or
public Container or(ArrayContainer value2)
Description copied from class:Container
Computes the bitwise OR of this container with another (union). This container as well as the provided container are left unaffected.
-
or
public Container or(BitmapContainer x)
Description copied from class:Container
Computes the bitwise OR of this container with another (union). This container as well as the provided container are left unaffected.
-
or
public Container or(RunContainer x)
Description copied from class:Container
Computes the bitwise OR of this container with another (union). This container as well as the provided container are left unaffected.
-
or
protected Container or(ShortIterator it)
-
rank
public int rank(short lowbits)
Description copied from class:Container
Rank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality()).
-
readExternal
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
- Specified by:
readExternal
in interfaceExternalizable
- Throws:
IOException
ClassNotFoundException
-
remove
public Container remove(int begin, int end)
Description copied from class:Container
Return a new container with all shorts in [begin,end) remove using an unsigned interpretation.
-
removeAtIndex
protected void removeAtIndex(int loc)
-
remove
public Container remove(short x)
Description copied from class:Container
Remove the short from this container. May create a new container.
-
repairAfterLazy
public Container repairAfterLazy()
Description copied from class:Container
The output of a lazyOR or lazyIOR might be an invalid container, this should be called on it.- Specified by:
repairAfterLazy
in classContainer
- Returns:
- a new valid container
-
runOptimize
public Container runOptimize()
Description copied from class:Container
Convert to RunContainers, when the result is smaller. Overridden by RunContainer to possibility switch from RunContainer to a smaller alternative. Overridden by BitmapContainer with a more efficient approach.- Specified by:
runOptimize
in interfaceWordStorage<Container>
- Specified by:
runOptimize
in classContainer
- Returns:
- the new container
-
select
public short select(int j)
Description copied from class:Container
Return the jth value
-
serialize
public void serialize(DataOutput out) throws IOException
Description copied from class:Container
Serialize the container.- Specified by:
serialize
in classContainer
- Parameters:
out
- the DataOutput stream- Throws:
IOException
- Signals that an I/O exception has occurred.
-
serializedSizeInBytes
public int serializedSizeInBytes()
Description copied from class:Container
Report the number of bytes required to serialize this container.- Specified by:
serializedSizeInBytes
in classContainer
- Returns:
- the size in bytes
-
toBitmapContainer
public BitmapContainer toBitmapContainer()
Copies the data in a bitmap container.- Specified by:
toBitmapContainer
in classContainer
- Returns:
- the bitmap container
-
nextValue
public int nextValue(short fromValue)
Description copied from class:Container
Gets the first value greater than or equal to the lower bound, or -1 if no such value exists.
-
previousValue
public int previousValue(short fromValue)
Description copied from class:Container
Gets the last value less than or equal to the upper bound, or -1 if no such value exists.- Specified by:
previousValue
in classContainer
- Parameters:
fromValue
- the upper bound (inclusive)- Returns:
- the previous value
-
nextAbsentValue
public int nextAbsentValue(short fromValue)
Description copied from class:Container
Gets the first absent value greater than or equal to the lower bound.- Specified by:
nextAbsentValue
in classContainer
- Parameters:
fromValue
- the lower bound (inclusive)- Returns:
- the next absent value
-
previousAbsentValue
public int previousAbsentValue(short fromValue)
Description copied from class:Container
Gets the last value less than or equal to the upper bound.- Specified by:
previousAbsentValue
in classContainer
- Parameters:
fromValue
- the upper bound (inclusive)- Returns:
- the previous absent value
-
first
public int first()
Description copied from class:Container
Get the first integer held in the container
-
last
public int last()
Description copied from class:Container
Get the last integer held in the container
-
toMappeableContainer
public MappeableContainer toMappeableContainer()
Description copied from class:Container
Convert to a mappeable container.- Specified by:
toMappeableContainer
in classContainer
- Returns:
- the mappeable container
-
toShortBuffer
public ShortBuffer toShortBuffer()
Return the content of this container as a ShortBuffer. This creates a copy and might be relatively slow.- Returns:
- the ShortBuffer
-
trim
public void trim()
Description copied from class:Container
If possible, recover wasted memory.
-
writeArray
protected void writeArray(DataOutput out) throws IOException
Description copied from class:Container
Write just the underlying array.- Specified by:
writeArray
in classContainer
- Parameters:
out
- output stream- Throws:
IOException
- in case of failure
-
writeArray
protected void writeArray(ByteBuffer buffer)
Description copied from class:Container
Write just the underlying array.- Specified by:
writeArray
in classContainer
- Parameters:
buffer
- ByteBuffer to write to
-
writeExternal
public void writeExternal(ObjectOutput out) throws IOException
- Specified by:
writeExternal
in interfaceExternalizable
- Throws:
IOException
-
xor
public Container xor(ArrayContainer value2)
Description copied from class:Container
Computes the bitwise XOR of this container with another (symmetric difference). This container as well as the provided container are left unaffected.
-
xor
public Container xor(BitmapContainer x)
Description copied from class:Container
Computes the bitwise XOR of this container with another (symmetric difference). This container as well as the provided container are left unaffected.
-
xor
public Container xor(RunContainer x)
Description copied from class:Container
Computes the bitwise XOR of this container with another (symmetric difference). This container as well as the provided container are left unaffected.
-
xor
protected Container xor(ShortIterator it)
-
forEach
public void forEach(short msb, IntConsumer ic)
Description copied from class:Container
Iterate through the values of this container and pass them along to the IntConsumer, using msb as the 16 most significant bits.
-
lazyor
protected Container lazyor(ArrayContainer value2)
-
-