public interface ShortIndexable extends PrimitiveShortIterable, Sizeable
Be careful: short
values in Java are often converted to int
and back again, so various methods of this indexable may introduce performance penalties.
This interface is only useful if space is a problem, otherwise it is recommended
to use IntIndexable
.
The EMPTY
constant or emptyIndexable()
method provide the same
useful return value to indicate emptiness.
Simple implementations should extend ShortIndexable.Base
because
that provides useful implementations for standard Object methods and implements
Comparable
.
FastShortSequenceSearch
Modifier and Type | Interface and Description |
---|---|
static class |
ShortIndexable.Base
Abstract base class which provides useful implementations
for
Object.equals(Object) , Object.hashCode() ,
Object.toString() . |
Modifier and Type | Field and Description |
---|---|
static ShortIndexable.Base |
EMPTY
An empty indexable.
|
static ShortIndexable |
SINGLE_0
Short indexable with only one element with value 0.
|
EMPTY_SHORT_ITERATOR
Modifier and Type | Method and Description |
---|---|
default void |
addAllTo(java.util.Collection<? super java.lang.Short> collection)
Add all elements of this indexable to the given collection.
|
default int |
addToArray(int[] array,
int pos)
Add the content of this indexable to the given int array.
|
default int |
addToArray(int[] array,
int arrayPos,
int index,
int length)
Add a part of the content of this indexable to the given int array.
|
default int |
addToArray(short[] array,
int pos)
Add the content of this indexable to the given array.
|
default int |
addToArray(short[] array,
int arrayPos,
int index,
int length)
Add a part of the content of this indexable to the given array.
|
default ShortIndexable.Base |
asBase()
Make this short integer indexable usable as a class with defined standard Object methods.
|
default java.util.Collection<java.lang.Short> |
asCollection()
Get a view on this indexable as an unmodifiable collection.
|
default Indexable<java.lang.Short> |
asIndexable()
Get a view of this indexable as a standard object-based indexable.
|
default IntIndexable.Base |
asIntIndexable()
View this short indexable as an integer indexable.
|
default java.util.List<java.lang.Short> |
asList()
Get a view on this indexable as an unmodifiable list.
|
default IntIndexable.Base |
asUnsignedIndexable()
View this short indexable as an integer indexable using unsigned values.
|
default int |
binarySearch(short value)
Do a binary search in an indexable ordered in natural ascending order.
|
default int |
binarySearch(short value,
ShortOrdering order)
Do a binary search in an ordered indexable.
|
static int |
compare(ShortIndexable indexable1,
ShortIndexable indexable2)
Compare two short indexables.
|
static int |
compareUnsigned(ShortIndexable indexable1,
ShortIndexable indexable2)
Compare two short indexables as if they contain unsigned short values.
|
static ShortIndexable.Base |
emptyIndexable()
Get an empty indexable set.
|
static boolean |
equal(ShortIndexable indexable1,
java.lang.Object indexable2)
Are two short indexables equal?
|
static boolean |
equal(ShortIndexable indexable1,
ShortIndexable indexable2)
Are two short indexables equal?
|
default int |
firstMatch(ShortPredicate1 check)
Get the first index for which the given check is fulfilled.
|
default short |
foldLeft(short initialValue,
ShortOperator2 foldOperation)
Go over all values and do a cumulative calculation.
|
default ShortIndexable |
frozen()
Get a frozen version of this indexable.
|
short |
get(int index)
Get the element at the given index.
|
default short |
gyt(int index)
Pythonesque get.
|
static int |
hash(ShortIndexable indexable)
Calculate a hashcode for a short indexable.
|
default ShortIndexable.Base |
headSet(int toIndex)
Create an indexable subset from the last elements of this indexable set.
|
default java.lang.Iterable<java.lang.Integer> |
indexes()
Get the indexes of this indexable as an iterable range.
|
static ShortIndexable.Base |
init(int size,
short value)
Get a short indexable of a given size which always returns the same value.
|
static ShortIndexable |
initByIndex(int size,
IntToShortFunction1 producer)
Get a short indexable of a given size which returns elements created by index.
|
default IntIndexable |
intIndexes()
Get the indexes of this indexable as an integer indexable.
|
default java.util.PrimitiveIterator.OfInt |
intIterator()
Get an primitive int iterator.
|
default boolean |
isEmpty()
Is this indexable empty?
|
default boolean |
isOrdered()
Is this indexable sorted naturally?
|
default boolean |
isOrdered(ShortOrdering order)
Is this indexable sorted according to the given ordering?
|
default boolean |
isStrictlyOrdered()
Is this indexable strictly sorted naturally?
|
default boolean |
isStrictlyOrdered(ShortOrdering order)
Is this indexable strictly sorted according to the given ordering?
|
default java.util.Iterator<java.lang.Short> |
iterator()
Returns an iterator over elements of type
T . |
default int |
lastMatch(ShortPredicate1 check)
Get the last index for which the given check is fulfilled.
|
default java.util.ListIterator<java.lang.Short> |
listIterator()
Returns a list iterator over elements of type
T . |
default int |
nextMatch(int startIndex,
ShortPredicate1 check)
Get the next index for which the given check is fulfilled.
|
default MutableIntIndexable |
ordered()
Create a (mutable) int indexable from the values of this indexable
which is ordered in natural order.
|
default MutableShortIndexable |
ordered(ShortOrdering order)
Create a (mutable) int indexable from the values of this indexable
which is ordered as defined by the given ordering.
|
default int |
previousMatch(int startIndex,
ShortPredicate1 check)
Get the previous index for which the given check is fulfilled.
|
default ShortIndexable.Base |
reverse()
Get this indexable but with inverted order.
|
default ShortIndexable |
rotated(int steps)
Get a rotated view of this short indexable.
|
default PrimitiveShortIterator |
shortIterator()
Get a primitive short iterator.
|
default PrimitiveShortIterator |
shortIterator(int from,
int to)
Get a short iterator from the given sub set.
|
static ShortIndexable.Base |
singleton(short value)
View a single short value as a short indexable of size 1.
|
default ShortIndexable.Base |
subSet(int fromIndex,
int toIndex)
Get an indexable subset.
|
default ShortIndexable.Base |
sybSet(int fromIndex,
int toIndex)
Get an indexable subset.
|
default ShortIndexable.Base |
tailSet(int fromIndex)
Create an indexable subset from the last elements of this indexable set.
|
default short[] |
toArray()
Convert this indexable into a Java array.
|
default int[] |
toIntArray()
Convert this indexable into a Java int array.
|
default java.util.ArrayList<java.lang.Short> |
toList()
Create a list from this short indexable.
|
static java.lang.String |
toString(ShortIndexable indexable)
Create a string representation of the given indexable.
|
default <T> Indexable<T> |
view(ShortFunction1<? extends T> mapper)
Return a mapped view on this short indexable.
|
static ShortIndexable.Base |
viewArray(short... array)
View a short array as an Indexable.
|
static ShortIndexable.Base |
viewArray(short[] array,
int start,
int length)
View part of a short array as an Indexable.
|
static <T> ShortIndexable.Base |
viewArray(T[] array,
ToShortFunction<? super T> valueExtract)
View an object array as a short indexable.
|
default BooleanIndexable |
viewAsBoolean(ShortPredicate1 convert)
View this indexable as a boolean indexable while using a conversion for
each value.
|
default ByteIndexable |
viewAsByte()
View this short integer indexable as a byte integer indexable.
|
default DoubleIndexable |
viewAsDouble()
View this short integer indexable as a double indexable.
|
default FloatIndexable |
viewAsFloat()
View this short integer indexable as a float indexable.
|
default IntIndexable |
viewAsInt()
View this short integer indexable as an integer indexable.
|
default LongIndexable |
viewAsLong()
View this short integer indexable as a long integer indexable.
|
default IntIndexable |
viewAsUnsignedInt()
View this short integer indexable as an unsigned integer indexable.
|
default LongIndexable |
viewAsUnsignedLong()
View this short integer indexable as an unsigned long integer indexable.
|
static ShortIndexable.Base |
viewByIndex(int size,
IntToShortFunction1 producer)
Get a short indexable of a given size which returns elements created by index.
|
static ShortIndexable.Base |
viewIndexable(Indexable<? extends java.lang.Number> indexable)
View a generic Number indexable as short indexable.
|
static ShortIndexable.Base |
viewIndexable(Indexable<? extends java.lang.Number> indexable,
short nullFallback)
View a generic Number indexable as short indexable.
|
static <T> ShortIndexable.Base |
viewIndexable(Indexable<T> indexable,
ToShortFunction<? super T> extractor)
View a generic indexable as a short indexable.
|
static ShortIndexable.Base |
viewList(java.util.List<? extends java.lang.Number> list)
View a list as an Indexable.
|
static ShortIndexable.Base |
viewList(java.util.List<? extends java.lang.Number> list,
short nullValue)
View a list as an Indexable.
|
static <T> ShortIndexable.Base |
viewList(java.util.List<T> list,
ToShortFunction<? super T> extractor)
View a generic list as a short indexable.
|
static ShortIndexable.Base |
viewNumberArray(java.lang.Number... array)
View a Number array as an Indexable.
|
default ShortIndexable |
viewOp(ShortOperator1 op)
View this short indexable transformed by an operator.
|
default ShortIndexable |
withAppendedValue(short value)
Create a view with of this indexable with another value added at the end.
|
static ShortIndexable.Base |
withCachedHash(ShortIndexable indexable)
Wrap an indexable with one which caches the hash value.
|
default ShortIndexable |
withExchangedValueAt(int index,
short value)
Create a view of this short indexable with an exchanged value.
|
default ShortIndexable |
withInsertedValueAt(int index,
short value)
Create a view of this short indexable with an inserted value.
|
default ShortIndexable |
withRemovedValueAt(int index)
Create a view of this indexable with one value removed.
|
default ShortIndexable |
withSwappedValuesAt(int index1,
int index2)
Create a view of this short indexable with two values swapped.
|
asIntIterable, asLongIterable, asUnsignedIntIterable, asUnsignedLongIterable, containsShort, forEachShort, forEachShortFragile
static final ShortIndexable SINGLE_0
static final ShortIndexable.Base EMPTY
short get(int index)
index
- index between 0
and size() - 1
default short gyt(int index)
-1
references the last element, -2
its predecessor, and so on.index
- index between -size()
and size() - 1
@NotNull default ShortIndexable.Base reverse()
default boolean isEmpty()
true
: there are no elements in this indexablefalse
: this indexable has elements@NotNull default java.util.PrimitiveIterator.OfInt intIterator()
@NotNull default PrimitiveShortIterator shortIterator()
shortIterator
in interface PrimitiveShortIterable
short
iterator which iterates over this indexable@NotNull default PrimitiveShortIterator shortIterator(int from, int to)
from
- first index of iteratorto
- one past last index of iterator@NotNull default java.util.Iterator<java.lang.Short> iterator()
T
.iterator
in interface java.lang.Iterable<java.lang.Short>
iterator
in interface PrimitiveShortIterable
@NotNull default java.util.ListIterator<java.lang.Short> listIterator()
T
.@NotNull default ShortIndexable.Base subSet(int fromIndex, int toIndex)
fromIndex
to toIndex - 1
.fromIndex
- start index of sub settoIndex
- index after last index@NotNull default ShortIndexable.Base sybSet(int fromIndex, int toIndex)
fromIndex
- start index of sub settoIndex
- end index of sub set@NotNull default ShortIndexable.Base tailSet(int fromIndex)
fromIndex
- index to start with, negative counts from the back@NotNull default ShortIndexable.Base headSet(int toIndex)
toIndex
- index one after the end (equal to the length of the returned set),
negative counts from the back@NotNull default <T> Indexable<T> view(@NotNull ShortFunction1<? extends T> mapper)
T
- result type of mappermapper
- mapper@NotNull default java.util.Collection<java.lang.Short> asCollection()
Collection.addAll(Collection)
.@NotNull default java.util.List<java.lang.Short> asList()
Collection.addAll(Collection)
.toList()
@NotNull default java.util.ArrayList<java.lang.Short> toList()
asList()
default void addAllTo(@NotNull java.util.Collection<? super java.lang.Short> collection)
collection
- collection to add to@NotNull default Indexable<java.lang.Short> asIndexable()
Short
values@NotNull default short[] toArray()
default int addToArray(@NotNull short[] array, int pos)
array
- array where the content is addedpos
- position in the array where the content of this indexable is addeddefault int addToArray(@NotNull short[] array, int arrayPos, int index, int length)
array
- array where the content is addedarrayPos
- position in hte array where the content is addedindex
- start index of this indexable which is added firstlength
- number of entries of this indexable added to the arraydefault int[] toIntArray()
default int addToArray(@NotNull int[] array, int pos)
array
- array where the content is addedpos
- position in the array where the content of this indexable is addeddefault int addToArray(@NotNull int[] array, int arrayPos, int index, int length)
array
- array where the content is addedarrayPos
- position in hte array where the content is addedindex
- start index of this indexable which is added firstlength
- number of entries of this indexable added to the array@NotNull default java.lang.Iterable<java.lang.Integer> indexes()
intIndexes()
,
Range.indexes(int)
@NotNull default IntIndexable intIndexes()
indexes()
,
IntIndexable.rangeFromSize(int)
@NotNull default IntIndexable.Base asIntIndexable()
Bytecode cannot handle short
in many places, therefore it is often converted
to int
and vice versa with extra instructions. To avoid these extra instructions
outside of this interface it is usually better to view this indexable as an IntIndexable
.
@NotNull default IntIndexable.Base asUnsignedIndexable()
default short foldLeft(short initialValue, @NotNull ShortOperator2 foldOperation)
initialValue
- start value for the operation, will be returned if this iterable is emptyfoldOperation
- operation applied to each value, will get the accumulated value as its
first and the current element value as its second argument@NotNull default ShortIndexable withInsertedValueAt(int index, short value)
ExpandableIntIndexable
if you want to carry out more
stuff like this.
As this creates a view of this indexable, changes to this indexable might result in a disaster when using the returned indexable!
index
- index where the value is inserted before the current index
(not Pythonesque, because it is possible to add an value at index == size()
,
and it is expected that most insertion will happen at 0 or at the end)value
- inserted value at that indexwithAppendedValue(short)
@NotNull default ShortIndexable withAppendedValue(short value)
value
- value to addwithInsertedValueAt(int, short)
@NotNull default ShortIndexable withExchangedValueAt(int index, short value)
ExpandableIntIndexable
if you want to carry out more
stuff like this.
As this creates a view of this indexable, changes to this indexable could lead to unexpected results when using the returned indexable!
index
- index where the element is exchanged, hiding the current element.
(Pythonesque)value
- exchanged value at that index@NotNull default ShortIndexable withRemovedValueAt(int index)
index
- index of the removed value (Pythonesque)@NotNull default ShortIndexable withSwappedValuesAt(int index1, int index2)
index1
- index of the first value (Pythonesque)index2
- index of the second value (Pythonesque)@NotNull default ShortIndexable rotated(int steps)
steps
will rotate left, i.e. any index will be accessed
as if the number of steps is added before extraction (modulo length).
E.g. a rotation of -1
will return the last element when index 0
is
requested, and the first element for index 1
.steps
- steps to rotatefrozen()
to create an indexable which no longer depends on this one@NotNull default ShortIndexable viewOp(@NotNull ShortOperator1 op)
op
- transforming operator@NotNull default DoubleIndexable viewAsDouble()
frozen()
on the result to create an independent copy
if this seems like a problem to you.@NotNull default FloatIndexable viewAsFloat()
frozen()
on the result to create an independent copy
if this seems like a problem to you.@NotNull default LongIndexable viewAsLong()
frozen()
on the result to create an independent copy
if this seems like a problem to you.@NotNull default LongIndexable viewAsUnsignedLong()
frozen()
on the result to create an independent copy
if this seems like a problem to you.@NotNull default IntIndexable viewAsInt()
frozen()
on the result to create an independent copy
if this seems like a problem to you.@NotNull default IntIndexable viewAsUnsignedInt()
frozen()
on the result to create an independent copy
if this seems like a problem to you.@NotNull default ByteIndexable viewAsByte()
frozen()
on the result to create an independent copy
if this seems like a problem to you.@NotNull default BooleanIndexable viewAsBoolean(@NotNull ShortPredicate1 convert)
Use frozen()
on the result to decouple it from this indexable.
convert
- converter applied to each value of this indexable before
it is returned from the resulting indexable@NotNull static ShortIndexable.Base viewList(@NotNull java.util.List<? extends java.lang.Number> list)
list
- list used as a base, required to have only non-null elements@NotNull static ShortIndexable.Base viewList(@NotNull java.util.List<? extends java.lang.Number> list, short nullValue)
list
- list used as a base, required to have only non-null elementsnullValue
- value returned for null
elements in the list@NotNull static <T> ShortIndexable.Base viewList(@NotNull java.util.List<T> list, @NotNull ToShortFunction<? super T> extractor)
T
- element type of listlist
- generic listextractor
- extractor function which extracts a short from the elements of list
list
@NotNull static ShortIndexable.Base viewIndexable(@NotNull Indexable<? extends java.lang.Number> indexable)
indexable
- generic indexable with Number elements, required to have only non-null elements@NotNull static ShortIndexable.Base viewIndexable(@NotNull Indexable<? extends java.lang.Number> indexable, short nullFallback)
indexable
- generic indexable with Number elementsnullFallback
- fallback for null
elements@NotNull static <T> ShortIndexable.Base viewIndexable(@NotNull Indexable<T> indexable, @NotNull ToShortFunction<? super T> extractor)
T
- element type of indexableindexable
- generic indexableextractor
- extractor function which extracts a short from the elements of indexable
indexable
@NotNull static ShortIndexable.Base viewNumberArray(@NotNull java.lang.Number... array)
subSet(int, int)
.array
- array used as base, required to hold only non-null values@NotNull static ShortIndexable.Base viewArray(@NotNull short... array)
subSet(int, int)
.array
- array used as base@NotNull static ShortIndexable.Base viewArray(@NotNull short[] array, int start, int length)
array
- array used as basestart
- index of first byte to use from the arraylength
- number of elements to use from the array@NotNull static <T> ShortIndexable.Base viewArray(@NotNull T[] array, @NotNull ToShortFunction<? super T> valueExtract)
T
- array element typearray
- viewed arrayvalueExtract
- converter from array elements to the short values of this indexable@NotNull static ShortIndexable.Base singleton(short value)
value
- single value@NotNull static ShortIndexable.Base init(int size, short value)
size
- size of the returned indexablevalue
- value returned for each elementsize
with always the same element@NotNull static ShortIndexable.Base viewByIndex(int size, @NotNull IntToShortFunction1 producer)
producer
when an element is requested.
Use frozen()
on the result to create an indexable which avoids this.size
- size of the returned indexableproducer
- producer which is called with an index and expected to return the associated valueproducer
@NotNull static ShortIndexable initByIndex(int size, @NotNull IntToShortFunction1 producer)
size
- size of the returned indexableproducer
- producer which is called with an index and expected to return the associated valueproducer
viewByIndex(int, IntToShortFunction1)
@NotNull static ShortIndexable.Base emptyIndexable()
@NotNull static java.lang.String toString(@NotNull ShortIndexable indexable)
indexable
- indexablestatic boolean equal(@NotNull ShortIndexable indexable1, @NotNull ShortIndexable indexable2)
indexable1
- first indexableindexable2
- second indexabletrue
if both indexables contain the same values in the same sequencefalse
if sizes or values differstatic boolean equal(@NotNull ShortIndexable indexable1, @Nullable java.lang.Object indexable2)
Object.equals(Object)
method.indexable1
- first indexableindexable2
- object expected to be an indexable itselftrue
if both indexables contain the same values in the same sequencefalse
if the second object is not an indexable, of if sizes or values differstatic int compare(@NotNull ShortIndexable indexable1, @NotNull ShortIndexable indexable2)
indexable1
- first indexableindexable2
- second indexable< 0>
if indexable1 < indxable2
,
0
if indexable1 == indexable2
, or
> 0
if indexable1 > indexable2
static int compareUnsigned(@NotNull ShortIndexable indexable1, @NotNull ShortIndexable indexable2)
indexable1
- first indexableindexable2
- second indexable< 0>
if indexable1 < indxable2
,
0
if indexable1 == indexable2
, or
> 0
if indexable1 > indexable2
static int hash(@NotNull ShortIndexable indexable)
indexable
- indexable for which the hash code is required@NotNull static ShortIndexable.Base withCachedHash(@NotNull ShortIndexable indexable)
The wrapped indexable must not change after it is wrapped, otherwise strange things are expected to happen.
indexable
- wrapped indexable, must not changeindexable
, but also provides
useful implementations for Object.hashCode()
, Object.equals(Object)
,
and Object.toString()
default int nextMatch(int startIndex, @NotNull ShortPredicate1 check)
startIndex
- start index for checking, Pythonesque
indexing supportedcheck
- check to perform on elements of this indexable until true
startIndex
for which the check returns true
,
Pythonesque.UNMAPPABLE
if nonedefault int firstMatch(@NotNull ShortPredicate1 check)
check
- check to perform on elements of this indexable until true
true
,
-1
if nonedefault int previousMatch(int startIndex, @NotNull ShortPredicate1 check)
startIndex
- start index for checking, Pythonesque
indexing supportedcheck
- check to perform on elements of this indexable until true
startIndex
for which the check returns true
,
Pythonesque.UNMAPPABLE
if nonedefault int lastMatch(@NotNull ShortPredicate1 check)
check
- check to perform on elements of this indexable until true
true
,
-1
if none@NotNull default ShortIndexable frozen()
Often Indexables are used as a view to underlying collections. Although this interface is immutable, the underlying colelction might nevertheless change. This copies the current state of this indexable into an unmodifiable state, and returns an Indexable which is stable in size and will return always the same element for a given index. Beware: it is still possible that any element itself changes when the elements are mutable.
Calling frozen()
again on the returned object will just return
the object itself, so you can safely call this method more than once.
default boolean isOrdered(@NotNull ShortOrdering order)
See isStrictlyOrdered(ShortOrdering) for a stricter alternative.
Prefer isOrdered() to check for natural ordering because it is faster.
order
- expected orderingtrue
if this indexable is sorted as defined by order
false
if notdefault boolean isOrdered()
See isStrictlyOrdered() for a stricter alternative.
true
if this indexable is sorted naturallyfalse
if notdefault boolean isStrictlyOrdered(@NotNull ShortOrdering order)
Prefer isOrdered() to check for natural ordering because it is faster.
order
- expected orderingtrue
if this indexable is sorted as defined by order
false
if notdefault boolean isStrictlyOrdered()
true
if this indexable is sorted naturallyfalse
if notdefault int binarySearch(short value)
natural ascending order
,
i.e. isOrdered(ShortOrdering) has to return true
for this ordering.
For efficiency this prerequisite is not checked, but not fulfilling
it will make this method return bogus results. If this indexable is only ordered,
but not strictly ordered
it is not defined
which index is returned when the looked up value appears in a sequence of equal values.value
- value to look up-(insertIndex + 1)
.default int binarySearch(short value, @NotNull ShortOrdering order)
order
,
i.e. isOrdered(ShortOrdering) has to return true
for this order.
For efficiency this prerequisite is not checked, but not fulfilling
it will make this method return bogus results. If this indexable is only ordered,
but not strictly ordered
it is not defined
which index is returned when the looked up value appears in a sequence of equal values.value
- value to look uporder
- sort order-(insertIndex + 1)
.@NotNull default MutableShortIndexable ordered(@NotNull ShortOrdering order)
This is a convenience method and should be used with care!
If natural ordering is required, use ordered()
instead,
as it 1.5 times faster!
order
- sort order@NotNull default MutableIntIndexable ordered()
This can be some 1.5x faster than using ordered(ShortOrdering)
with natural order
.
@NotNull default ShortIndexable.Base asBase()