Class KeySetIndexProxy<E>
- Type Parameters:
E
- the type of elements in this set
- All Implemented Interfaces:
StorageIndex
,java.lang.Iterable<E>
public final class KeySetIndexProxy<E> extends AbstractNativeProxy implements java.lang.Iterable<E>
The elements are stored as keys in the underlying database in the lexicographical order.
As each operation accepting an element needs to pass the entire element
to the underlying database as a key, it's better, in terms of performance, to use this index
with small elements. If you need to store large elements and can perform operations
by hashes of the elements, consider using a ValueSetIndexProxy
.
The "destructive" methods of the set, i.e., the ones that change its contents,
are specified to throw UnsupportedOperationException
if the set has been created with
a read-only database access.
All method arguments are non-null by default.
This class is not thread-safe and and its instances shall not be shared between threads.
When the access goes out of scope, this set is destroyed. Subsequent use of the closed set
is prohibited and will result in IllegalStateException
.
- See Also:
ValueSetIndexProxy
,Access
-
Field Summary
-
Method Summary
Modifier and Type Method Description void
add(E e)
Adds a new element to the set.void
clear()
Removes all of the elements from this set.boolean
contains(E e)
Returns true if this set contains the specified element.IndexAddress
getAddress()
Returns the index address: its identifier in the database.java.util.Iterator<E>
iterator()
Creates an iterator over the set elements.static <E> KeySetIndexProxy<E>
newInstance(IndexAddress address, AbstractAccess access, Serializer<E> serializer)
Creates a new key set proxy.void
remove(E e)
Removes the element from this set.java.util.stream.Stream<E>
stream()
Returns a stream of the set elements.java.lang.String
toString()
Methods inherited from class com.exonum.binding.core.proxy.AbstractNativeProxy
getNativeHandle, isValidHandle
-
Method Details
-
newInstance
public static <E> KeySetIndexProxy<E> newInstance(IndexAddress address, AbstractAccess access, Serializer<E> serializer)Creates a new key set proxy.Warning: do not invoke this method from service code, use
Access.getKeySet(IndexAddress, Serializer)
.- Type Parameters:
E
- the type of keys in this set- Parameters:
address
- an index addressaccess
- a database access. Must be valid. If an access is read-only, "destructive" operations are not permitted.serializer
- a serializer of set keys- Throws:
java.lang.IllegalStateException
- if the access is not validjava.lang.IllegalArgumentException
- if the name is empty- See Also:
StandardSerializers
-
add
Adds a new element to the set. The method has no effect if the set already contains such element.- Parameters:
e
- an element to add- Throws:
java.lang.IllegalStateException
- if this set is not validjava.lang.UnsupportedOperationException
- if this set is read-only
-
clear
public void clear()Removes all of the elements from this set. The set will be empty after this method returns.- Throws:
java.lang.IllegalStateException
- if this set is not validjava.lang.UnsupportedOperationException
- if this set is read-only
-
contains
Returns true if this set contains the specified element.- Throws:
java.lang.IllegalStateException
- if this set is not valid
-
iterator
Creates an iterator over the set elements. The elements are ordered lexicographically.- Specified by:
iterator
in interfacejava.lang.Iterable<E>
- Returns:
- an iterator over the elements of this set
- Throws:
java.lang.IllegalStateException
- if this set is not valid
-
stream
Returns a stream of the set elements. The elements are ordered lexicographically.- Throws:
java.lang.IllegalStateException
- if this set is not valid
-
remove
Removes the element from this set. If it's not in the set, does nothing.- Parameters:
e
- an element to remove.- Throws:
java.lang.IllegalStateException
- if this set is not validjava.lang.UnsupportedOperationException
- if this set is read-only
-
getAddress
Description copied from interface:StorageIndex
Returns the index address: its identifier in the database.Please note that the implementations may return either relative or absolute address. The address is not required to be equal to the one passed to the index constructor.
- Specified by:
getAddress
in interfaceStorageIndex
-
toString
public java.lang.String toString()- Overrides:
toString
in classjava.lang.Object
-