Package Torello.Java.ReadOnly
Class ReadOnlyArrayList<E>
- java.lang.Object
-
- Torello.Java.ReadOnly.ReadOnlyArrayList<E>
-
- Type Parameters:
E
- the type of elements in this list
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Iterable<E>
,java.util.RandomAccess
,ReadOnlyCollection<E>
,ReadOnlyList<E>
public class ReadOnlyArrayList<E> extends java.lang.Object implements ReadOnlyList<E>, java.util.RandomAccess, java.io.Serializable
This class was originally copied fromGitHub's Open-JDK
Account. It has been heavily modified as all method bodies have been removed; although few changes were applied to the file's Javadoc Commenting. Method and parameter names & types have not been modified whatsoever - although several methods have been eliminated.
This file contains nothing more than Wrapper-Code which has been placed around the code from the original Open JDK-21 Source-File of the same (or, rather, highly similar) Class-Name. The original JDK Source-File may be viewed on theJDK-21 GitHub
public (and, coincidentally, Read-Only) Source-Release archive for Java Packagejava.util.*
The Original'.java'
Source-File's Header-Copyright Information is included here:File Copyright
. Within that Copyright Notice, it is suggested that a copy of theGNU Public License V2
also be included alongside.Immutable Wrapper forjava.util.ArrayList
, found in the "Java Collections Framework".
Plethora of Constructors:
How can data actually be inserted into a class that asserts it is a Read-Only, and therefore un-modifiable, class? Well, there are numerous constructors offered by this class for precisely this purpose. A wide variety of Data-Container, Mapping-Function and Filter input-parameters facilitate getting data into this Read-Only class, via a constructor. This class offers a very strong guarantee which is that once constructed, the instance simply cannot be modified because this class simply doesn't have any Data-Modification Methods.
In addition to the list of constructors offered, there is also a builder class that buildsReadOnlyArrayList's
. The builder actually extendsjava.util.ArrayList
, and can therefore insert / accept / add data in just about any way that the originalArrayList
can.
Immutable Wrapper Class:
This data class contains all of the methods that the standard Java class 'ArrayList
' contains - except those which would directly or indirectly modify / mutate the internal data-structure.
In order to guarantee that the contents and values of thisArrayList
remain constant and unchanged, this class retains an internalArrayList
, and assigns it the Java modifier'private'
to prevent any outside, unwanted modification. This class' own methods are all trivial, single-line wrappers that invoke the originaljava.util
methods, but leave out any & all wrappers for methods that have the ability to modify, update, remove or insert values into the internal and privateArrayList
.
Finally, this class offers a Read Only Guarantee, which is enforced by preventing any instantiation of this class from occuring that would allow outside references of its internal, privateArrayList
field
Immutableinterface
Inheritance-Tree:
This class implements a variant of the JDK'sjava.util.*
Interface-Stack, all of which have been slightly modified (and renamed to add the prefix'ReadOnly'
to their names). This decision was necessary because many of the support functions inside Java Collection Framework classes have utility / helper methods that retrieve & generate Sub-Maps and Sub-Sets that are linked to the originalCollection's, Set's
andMap's
from whence they were produced.
These Sub-Map / Sub-Set retrieval methods all sing the same refrain - changes to the returnedMap
/Set
will be reflected into'this'
instance, and vice-versa.
TheseSub-Map's
andSub-Set's
would easily (even though 'accidentally') provide a dangerous back-door means for modifying and updating a Collection that is claiming to be Read-Only & Immutable.
As a result, the decision was made to also port all of thejava.util.*
interfaces, such asSet, Map, List & Collection
, into the Read-Only Collections Framework by renaming them toReadOnlySet, ReadOnlyMap, & ReadOnlyCollection
- and of course to remove / eliminate all Mutator-Methods from those interfaces. This extra step further guarantees the provision that this Data-Class is, truly, Read-Only and un-modifiable.
Self-Referential ReadOnlyArrayList's
Though likely uncommon in most typical software projects, it is possible for aArrayList
to actually contain a reference to itself. However, in the translation from a standardArrayList
to aReadOnlyArrayList
, there is actually no direct and realizable way to preserve any self-referential pointers inside theReadOnlyArrayList
which is being constructed.
Java's Generic Type-System, generally, makes such references nearly (but not completely) impossible. Unless you have assignedjava.lang.Object
to the Data-Class' Generic-Type, there is likely no common Ancestor-Type that would inherit both aReadOnlyArrayList
, and the other objects in your data-set.
As a result, if you happen to pass an instance of data that contains references or pointers to itself, those pointers will not be updated to reference the Read-Only variant of your Data-Structure when that Data-Structure is created. TheReadOnlyArrayList
that you get back will simply contain pointers to the original Data-Structure you passed to the constructor of this class!- See Also:
- Serialized Form
Hi-Lited Source-Code:This File's Source Code:
- View Here: Torello/Java/ReadOnly/ReadOnlyArrayList.java
- Open New Browser-Tab: Torello/Java/ReadOnly/ReadOnlyArrayList.java
File Size: 39,208 Bytes Line Count: 900 '\n' Characters Found
Read-Only Collections Converter:
- View Here: InterfaceBuilder.java
- Open New Browser-Tab: InterfaceBuilder.java
File Size: 19,123 Bytes Line Count: 454 '\n' Characters Found
-
-
Field Summary
Serializable ID Modifier and Type Field protected static long
serialVersionUID
-
Constructor Summary
Construct a ReadOnly Instance Constructor ReadOnlyArrayList(
Integer quantityIfKnown,
Supplier<E> s
)Use aSupplier<E>
to provide an arbitrary number of elements of type'E'
directly to this constructor.ReadOnlyArrayList(Collection<E> c)
Copies parameter'c'
(and saves it) in order to guarantee that'this'
instance is Read-Only, and shielded from outside modification.Iterable<E> Source: Build an Instance Constructor ReadOnlyArrayList(
Iterable<E> i,
Integer sizeIfKnown
)If a Standard JavaIterable
can be directly mapped into anArrayList
(and, ergo, an entire Builder-Instance would be a bit excessive) - this constructor will seamlessly convert any JavaIterable<E>
directly into aReadOnlyArrayList<E>
with just this single invocation.ReadOnlyArrayList(
Iterable<T> i,
Function<? super T,? extends E> mapper,
Integer sizeIfKnown
)If only a small amount of processing needs to be done on the contents of some Java Data-Type, and using an entire Builder-Class seems disproportionately complex - this constructor can convert any JavaIterable
into aReadOnlyArrayList
, using a simple'mapper'
.Iterable<E> Source: Build Instance, but Filter some Elements Constructor ReadOnlyArrayList(
Iterable<E> i,
Predicate<? super E> filter,
Integer sizeIfKnown
)If a Standard JavaIterable
can be directly mapped into anArrayList
(and, ergo, an entire Builder-Instance would be a bit excessive) - this constructor will seamlessly convert any JavaIterable<E>
directly into aReadOnlyArrayList<E>
with just this single invocation.ReadOnlyArrayList(
Iterable<T> i,
Function<? super T,? extends E> mapper,
Predicate<? super T> filter,
Integer sizeIfKnown
)If only a small amount of processing needs to be done on the contents of some Java Data-Type, and using an entire Builder-Class seems disproportionately complex - this constructor can convert any JavaIterable
into aReadOnlyArrayList
, using a simple'mapper'
.Varargs Object[]-Array Source: Build an Instance Constructor ReadOnlyArrayList(
Class<E> elementsType,
Object... elements
)BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.ReadOnlyArrayList(
Function<Object,? extends E> mapper,
Object... elements
)BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.Varargs Object[]-Array Source: Build Instance, but Filter some Elements Constructor ReadOnlyArrayList(
Class<E> elementsType,
Predicate<? super E> filter,
Object... elements
)BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.ReadOnlyArrayList(
Function<Object,? extends E> mapper,
Predicate<Object> filter,
Object... elements
)BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.@SafeVarargs Generic-Array Source: Build an Instance Constructor ReadOnlyArrayList(
int dummy,
Function<? super T,? extends E> mapper,
T... elements
)BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.ReadOnlyArrayList(E... elements)
BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.@SafeVarargs Generic-Array Source: Build & Filter some Elements Constructor ReadOnlyArrayList(
Predicate<? super E> filter,
E... elements
)BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.ReadOnlyArrayList(
Predicate<? super T> filter,
Function<? super T,? extends E> mapper,
T... elements
)BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.Primitive Array Source: Build an Instance of a Java Boxed-Type Constructor ReadOnlyArrayList(Object primitiveArray)
Converts a Java Primitive-Array to aReadOnlyArrayList<E>
, where'E'
is the Java Boxed-Type which corresponds to the Primitive-Array's Type.ReadOnlyArrayList(
Object primitiveArray,
Predicate<?> filter
)Converts a Java Primitive-Array to aReadOnlyArrayList<E>
, where'E'
is the Java Boxed-Type which corresponds to the Primitive-Array's Type - but also accepts a'filter'
that can remove any array-entries that need to be removed.
-
Method Summary
Retrieve an ArrayList Element Modifier and Type Method E
get(int index)
Find the Index of an Element in this ArrayList Modifier and Type Method int
indexOf(Object o)
int
lastIndexOf(Object o)
Check this ArrayList's Contents Modifier and Type Method boolean
contains(Object o)
boolean
containsAll(Collection<?> c)
boolean
isEmpty()
int
size()
Convert this ArrayList to an Array Modifier and Type Method Object[]
toArray()
<T> T[]
toArray(T[] a)
Convert 'this' to a Standard 'java.util' Collections-Framework Type Modifier and Type Method ArrayList<E>
cloneToArrayList()
List<E>
wrapToImmutableList()
More Methods Modifier and Type Method void
forEach(Consumer<? super E> action)
Spliterator<E>
spliterator()
ReadOnlyList<E>
subList(int fromIndex, int toIndex)
Retrieve a Singleton Empty-Instance Modifier and Type Method static <T> ReadOnlyArrayList<T>
emptyROAL()
Java Stream API: Convert a Stream to a ReadOnlyArrayList Modifier and Type Method static <T> Collector<T,
ROArrayListBuilder<T>,
ReadOnlyArrayList<T>>streamCollector(Collector.Characteristics... characteristics)
Methods: class java.lang.Object Modifier and Type Method boolean
equals(Object o)
int
hashCode()
String
toString()
Methods: interface java.lang.Iterable Modifier and Type Method RemoveUnsupportedIterator<E>
iterator()
ReadOnlyListIterator<E>
listIterator()
ReadOnlyListIterator<E>
listIterator(int index)
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface Torello.Java.ReadOnly.ReadOnlyCollection
containsAND, containsAND, containsNAND, containsNAND, containsOR, containsOR, containsXOR, containsXOR, copyIntoCollection, parallelStream, stream, toArray
-
-
-
-
Field Detail
-
serialVersionUID
protected static final long serialVersionUID
This fulfils the SerialVersion UID requirement for all classes that implement Java'sinterface java.io.Serializable
. Using theSerializable
Implementation offered by java is very easy, and can make saving program state when debugging a lot easier. It can also be used in place of more complicated systems like "hibernate" to store data as well.- See Also:
- Constant Field Values
- Code:
- Exact Field Declaration Expression:
protected static final long serialVersionUID = 1;
-
-
Constructor Detail
-
ReadOnlyArrayList
public ReadOnlyArrayList(java.util.Collection<E> c)
Copies parameter'c'
(and saves it) in order to guarantee that'this'
instance is Read-Only, and shielded from outside modification.- Parameters:
c
- TheCollection
to be copied and saved into this instance internal and private'arrayList'
field.- Code:
- Exact Constructor Body:
fromBuilderOrArrayList = false; // Empty Optimization (throw away, completely, the reference, use static-constant) this.arrayList = (c.size() == 0) ? ((ArrayList<E>) EMPTY_ARRAY_LIST) : new ArrayList<>(c);
-
ReadOnlyArrayList
public ReadOnlyArrayList(java.lang.Integer quantityIfKnown, java.util.function.Supplier<E> s)
Use aSupplier<E>
to provide an arbitrary number of elements of type'E'
directly to this constructor. This constructor will request elements from theSupplier
provided to parameter's'
until's'
returns null.- Parameters:
quantityIfKnown
- If the number of elements inside theSupplier
is known, it may be provided so that the internalArrayList
is adequately initialized at the beginning of the constructor, without any need for resizing during this class' construction.
If this parameter is passed null, it will be ignored. If this happens, the initialization of the internalArrayList
will be done by Java's default (Zero Argument)ArrayList
-Constructor.
It is not mandatory that the value provided be accurate, as ought be seen in the code below, this value is solely used for the'initialCapacity'
parameter to theArrayList
constructor.s
- Any JavaSupplier<E>
- Throws:
java.lang.IllegalArgumentException
- if the specified quantity / capacity is negative- Code:
- Exact Constructor Body:
fromBuilderOrArrayList = false; ArrayList<E> arrayList = (quantityIfKnown != null) ? new ArrayList<>(quantityIfKnown) : new ArrayList<>(); E e; while ((e = s.get()) != null) arrayList.add(e); // Empty Optimization (throw away, completely, the reference, use static-constant) this.arrayList = (arrayList.size() == 0) ? ((ArrayList<E>) EMPTY_ARRAY_LIST) : arrayList;
-
ReadOnlyArrayList
public ReadOnlyArrayList (java.lang.Iterable<T> i, java.util.function.Function<? super T,? extends E> mapper, java.lang.Integer sizeIfKnown)
If only a small amount of processing needs to be done on the contents of some Java Data-Type, and using an entire Builder-Class seems disproportionately complex - this constructor can convert any JavaIterable
into aReadOnlyArrayList
, using a simple'mapper'
.- Type Parameters:
T
- The type of the elements inside the User-ProvidedIterable<T>
. These elements will not actually be inserted into the internalArrayList
, but rather will first be converted by the'mapper'
to chosen / destination type'E'
.- Parameters:
i
- Any JavaIterable<T>
mapper
- A function for mapping the iterated elements - which have Parameterized-Type'T'
- into the object instances used by theReadOnlyArrayList's
actual Generic-Type, which is'E'
.
If this parameter is passed null, this method will throw aNullPointerException
.sizeIfKnown
- If the number of elements inside theIterable
is known, it may be provided so that the internalArrayList
is adequately initialized at the beginning of the constructor, without any need for resizing during this class' construction.
If this parameter is passed null, it will be ignored. If this happens, the initialization of the internalArrayList
will be done by Java's default (Zero Argument)ArrayList
-Constructor.
It is not mandatory that the value provided be accurate, as ought be seen in the code below, this value is solely used for the'initialCapacity'
parameter to theArrayList
constructor.- Throws:
java.lang.NullPointerException
- if either'i'
or'mapper'
are passed null- Code:
- Exact Constructor Body:
Objects.requireNonNull(mapper, ROHelpers.NULL_MSG + "'mapper'"); fromBuilderOrArrayList = false; ArrayList<E> arrayList = (sizeIfKnown != null) ? new ArrayList<>(sizeIfKnown) : new ArrayList<>(); for (T t : i) arrayList.add(mapper.apply(t)); // Empty Optimization (throw away, completely, the reference, use static-constant) this.arrayList = (arrayList.size() == 0) ? ((ArrayList<E>) EMPTY_ARRAY_LIST) : arrayList;
-
ReadOnlyArrayList
public ReadOnlyArrayList(java.lang.Iterable<E> i, java.lang.Integer sizeIfKnown)
If a Standard JavaIterable
can be directly mapped into anArrayList
(and, ergo, an entire Builder-Instance would be a bit excessive) - this constructor will seamlessly convert any JavaIterable<E>
directly into aReadOnlyArrayList<E>
with just this single invocation.- Parameters:
i
- Any JavaIterable<E>
sizeIfKnown
- If the number of elements inside theIterable
is known, it may be provided so that the internalArrayList
is adequately initialized at the beginning of the constructor, without any need for resizing during this class' construction.
If this parameter is passed null, it will be ignored. If this happens, the initialization of the internalArrayList
will be done by Java's default (Zero Argument)ArrayList
-Constructor.
It is not mandatory that the value provided be accurate, as ought be seen in the code below, this value is solely used for the'initialCapacity'
parameter to theArrayList
constructor.- Throws:
java.lang.IllegalArgumentException
- if the specified initial capacity is negative- Code:
- Exact Constructor Body:
fromBuilderOrArrayList = false; ArrayList<E> arrayList = (sizeIfKnown != null) ? new ArrayList<>(sizeIfKnown) : new ArrayList<>(); for (E element : i) arrayList.add(element); // Empty Optimization (throw away, completely, the reference, use static-constant) this.arrayList = (arrayList.size() == 0) ? ((ArrayList<E>) EMPTY_ARRAY_LIST) : arrayList;
-
ReadOnlyArrayList
public ReadOnlyArrayList(java.lang.Class<E> elementsType, java.lang.Object... elements)
BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.- Parameters:
elementsType
- This parameter is used to specify the actual contents of the Var-Args Parameter'elements'
.
When loading thisReadOnlyArrayList
, each element inserted will first be cast to the type'elementsType'
, before insertion.
If this cast fails, aClassCastException
will throw.elements
- A Var-Args list, or an actual array, of elements all of which are instances of type'E'
(or a sub-class of'E'
).
Due to the occasional difficulties in using Generic-Type Parameters with arrays, there are two variants of this method, one which accepts a Var-Args Array of typejava.lang.Object
, and one which accepts a Var-Args Array of Generic / Parameterized Type type'E'
.
For the method-variant that accepts an array ofObject
, it is obligatory to provide some common super-type, of your own choosing, in order to specify the final type of theReadOnlyArrayList
. For the variant that accepts Generic-ArrayE...
, aReadOnlyArrayList<E>
is constructed.- Throws:
java.lang.ClassCastException
- if any of the'elements'
cannot be assigned to the type / class'E'
.java.lang.NullPointerException
- If'elementsType'
is passed null.- Code:
- Exact Constructor Body:
Objects.requireNonNull(elementsType, ROHelpers.NULL_MSG + "'elementsType'"); fromBuilderOrArrayList = false; if (elements.length == 0) this.arrayList = (ArrayList<E>) EMPTY_ARRAY_LIST; else { this.arrayList = new ArrayList<>(elements.length); for (Object element : elements) this.arrayList.add(elementsType.cast(element)); }
-
ReadOnlyArrayList
public ReadOnlyArrayList (java.util.function.Function<java.lang.Object,? extends E> mapper, java.lang.Object... elements)
BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.- Parameters:
mapper
- This may be any mapping function that accepts a Java'Object'
class / type instance, and in-return provides an instance of Type'E'
.
This'mapper'
parameter is mandatory and may not be null. If it is, aNullPointerException
will throw.elements
- A Var-Args list, or an actual array, of elements all of which are instances of type'E'
(or a sub-class of'E'
).
Due to the occasional difficulties in using Generic-Type Parameters with arrays, there are two variants of this method, one which accepts a Var-Args Array of typejava.lang.Object
, and one which accepts a Var-Args Array of Generic / Parameterized Type type'E'
.
For the method-variant that accepts an array ofObject
, it is obligatory to provide some common super-type, of your own choosing, in order to specify the final type of theReadOnlyArrayList
. For the variant that accepts Generic-ArrayE...
, aReadOnlyArrayList<E>
is constructed.- Throws:
java.lang.ClassCastException
- if any of the'elements'
cannot be assigned to the type / class'E'
.java.lang.NullPointerException
- If'mapper'
is passed null.- Code:
- Exact Constructor Body:
Objects.requireNonNull(mapper, ROHelpers.NULL_MSG + "'mapper'"); fromBuilderOrArrayList = false; if (elements.length == 0) this.arrayList = (ArrayList<E>) EMPTY_ARRAY_LIST; else { this.arrayList = new ArrayList<>(elements.length); for (Object element : elements) this.arrayList.add(mapper.apply(element)); }
-
ReadOnlyArrayList
public ReadOnlyArrayList (java.lang.Iterable<T> i, java.util.function.Function<? super T,? extends E> mapper, java.util.function.Predicate<? super T> filter, java.lang.Integer sizeIfKnown)
If only a small amount of processing needs to be done on the contents of some Java Data-Type, and using an entire Builder-Class seems disproportionately complex - this constructor can convert any JavaIterable
into aReadOnlyArrayList
, using a simple'mapper'
.- Type Parameters:
T
- The type of the elements inside the User-ProvidedIterable<T>
. These elements will not actually be inserted into the internalArrayList
, but rather will first be converted by the'mapper'
to chosen / destination type'E'
.- Parameters:
i
- Any JavaIterable<T>
mapper
- A function for mapping the iterated elements - which have Parameterized-Type'T'
- into the object instances used by theReadOnlyArrayList's
actual Generic-Type, which is'E'
.
If this parameter is passed null, this method will throw aNullPointerException
.filter
- This JavaPredicate
(with Generic-Type'T'
) can be used to filter the input Data-Structure content, such that elements which do not pass this filter's'test'
method are eliminated from the finalReadOnlyArrayList
instance.
This parameter may not be null, or aNullPointerException
will throw. If filtering the input data isn't necessary, this class also provides another constructor that is identical to this, but has one fewer parameter - leaving out this'filter'
Predicate.sizeIfKnown
- If the number of elements inside theIterable
is known, it may be provided so that the internalArrayList
is adequately initialized at the beginning of the constructor, without any need for resizing during this class' construction.
If this parameter is passed null, it will be ignored. If this happens, the initialization of the internalArrayList
will be done by Java's default (Zero Argument)ArrayList
-Constructor.
It is not mandatory that the value provided be accurate, as ought be seen in the code below, this value is solely used for the'initialCapacity'
parameter to theArrayList
constructor.- Throws:
java.lang.NullPointerException
- if any of'i'
,'mapper'
or'filter'
are passed null.- Code:
- Exact Constructor Body:
Objects.requireNonNull(mapper, ROHelpers.NULL_MSG + "'mapper'"); Objects.requireNonNull(filter, ROHelpers.NULL_MSG + "'filter'"); fromBuilderOrArrayList = false; ArrayList<E> arrayList = (sizeIfKnown != null) ? new ArrayList<>(sizeIfKnown) : new ArrayList<>(); for (T t : i) if (filter.test(t)) arrayList.add(mapper.apply(t)); // Empty Optimization (throw away, completely, the reference, use static-constant) this.arrayList = (arrayList.size() == 0) ? ((ArrayList<E>) EMPTY_ARRAY_LIST) : arrayList;
-
ReadOnlyArrayList
public ReadOnlyArrayList(java.lang.Iterable<E> i, java.util.function.Predicate<? super E> filter, java.lang.Integer sizeIfKnown)
If a Standard JavaIterable
can be directly mapped into anArrayList
(and, ergo, an entire Builder-Instance would be a bit excessive) - this constructor will seamlessly convert any JavaIterable<E>
directly into aReadOnlyArrayList<E>
with just this single invocation.- Parameters:
i
- Any JavaIteratable<E>
filter
- This JavaPredicate
(with Generic-Type'E'
) can be used to filter the input Data-Structure content, such that elements which do not pass this filter's'test'
method are eliminated from the finalReadOnlyArrayList
instance.
This parameter may not be null, or aNullPointerException
will throw. If filtering the input data isn't necessary, this class also provides another constructor that is identical to this, but has one fewer parameter - leaving out this'filter'
Predicate.sizeIfKnown
- If the number of elements inside theIterable
is known, it may be provided so that the internalArrayList
is adequately initialized at the beginning of the constructor, without any need for resizing during this class' construction.
If this parameter is passed null, it will be ignored. If this happens, the initialization of the internalArrayList
will be done by Java's default (Zero Argument)ArrayList
-Constructor.
It is not mandatory that the value provided be accurate, as ought be seen in the code below, this value is solely used for the'initialCapacity'
parameter to theArrayList
constructor.- Throws:
java.lang.IllegalArgumentException
- if the specified initial capacity is negativejava.lang.NullPointerException
- if either {'i'} or'filter'
are passed null- Code:
- Exact Constructor Body:
Objects.requireNonNull(filter, ROHelpers.NULL_MSG + "'filter'"); fromBuilderOrArrayList = false; ArrayList<E> arrayList = (sizeIfKnown != null) ? new ArrayList<>(sizeIfKnown) : new ArrayList<>(); for (E element : i) if (filter.test(element)) arrayList.add(element); // Empty Optimization (throw away, completely, the reference, use static-constant) this.arrayList = (arrayList.size() == 0) ? ((ArrayList<E>) EMPTY_ARRAY_LIST) : arrayList;
-
ReadOnlyArrayList
public ReadOnlyArrayList(java.lang.Class<E> elementsType, java.util.function.Predicate<? super E> filter, java.lang.Object... elements)
BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.- Parameters:
elementsType
- This parameter is used to specify the actual contents of the Var-Args Parameter'elements'
.
When loading thisReadOnlyArrayList
, each element inserted will first be cast to the type'elementsType'
, before insertion.
If this cast fails, aClassCastException
will throw.filter
- This JavaPredicate
(with Generic-Type'E'
) can be used to filter the input Data-Structure content, such that elements which do not pass this filter's'test'
method are eliminated from the finalReadOnlyArrayList
instance.
This parameter may not be null, or aNullPointerException
will throw. If filtering the input data isn't necessary, this class also provides another constructor that is identical to this, but has one fewer parameter - leaving out this'filter'
Predicate.elements
- A Var-Args list, or an actual array, of elements all of which are instances of type'E'
(or a sub-class of'E'
).
Due to the occasional difficulties in using Generic-Type Parameters with arrays, there are two variants of this method, one which accepts a Var-Args Array of typejava.lang.Object
, and one which accepts a Var-Args Array of Generic / Parameterized Type type'E'
.
For the method-variant that accepts an array ofObject
, it is obligatory to provide some common super-type, of your own choosing, in order to specify the final type of theReadOnlyArrayList
. For the variant that accepts Generic-ArrayE...
, aReadOnlyArrayList<E>
is constructed.- Throws:
java.lang.ClassCastException
- if any of the'elements'
cannot be assigned to the type / class'E'
.java.lang.NullPointerException
- If either'elementsType'
or'filter'
are passsed null.- Code:
- Exact Constructor Body:
Objects.requireNonNull(elementsType, ROHelpers.NULL_MSG + "'elementsType'"); Objects.requireNonNull(filter, ROHelpers.NULL_MSG + "'filter'"); fromBuilderOrArrayList = false; ArrayList<E> arrayList = new ArrayList<>(elements.length); E e; for (Object element : elements) if (filter.test(e = elementsType.cast(element))) arrayList.add(e); // Empty Optimization (throw away, completely, the reference, use static-constant) this.arrayList = (arrayList.size() == 0) ? ((ArrayList<E>) EMPTY_ARRAY_LIST) : arrayList;
-
ReadOnlyArrayList
public ReadOnlyArrayList (java.util.function.Function<java.lang.Object,? extends E> mapper, java.util.function.Predicate<java.lang.Object> filter, java.lang.Object... elements)
BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.- Parameters:
mapper
- This may be any mapping function that accepts a Java'Object'
class / type instance, and in-return provides an instance of Type'E'
.
This'mapper'
parameter is mandatory and may not be null. If it is, aNullPointerException
will throw.filter
- This JavaPredicate
(with Generic-Type'Object'
) can be used to filter the input Data-Structure content, such that elements which do not pass this filter's'test'
method are eliminated from the finalReadOnlyArrayList
instance.
This parameter may not be null, or aNullPointerException
will throw. If filtering the input data isn't necessary, this class also provides another constructor that is identical to this, but has one fewer parameter - leaving out this'filter'
Predicate.elements
- A Var-Args list, or an actual array, of elements all of which are instances of type'E'
(or a sub-class of'E'
).
Due to the occasional difficulties in using Generic-Type Parameters with arrays, there are two variants of this method, one which accepts a Var-Args Array of typejava.lang.Object
, and one which accepts a Var-Args Array of Generic / Parameterized Type type'E'
.
For the method-variant that accepts an array ofObject
, it is obligatory to provide some common super-type, of your own choosing, in order to specify the final type of theReadOnlyArrayList
. For the variant that accepts Generic-ArrayE...
, aReadOnlyArrayList<E>
is constructed.- Throws:
java.lang.NullPointerException
- If either'mapper'
or'filter'
are passed null- Code:
- Exact Constructor Body:
Objects.requireNonNull(mapper, ROHelpers.NULL_MSG + "'mapper'"); Objects.requireNonNull(filter, ROHelpers.NULL_MSG + "'filter'"); fromBuilderOrArrayList = false; ArrayList<E> arrayList = new ArrayList<>(elements.length); for (Object element : elements) if (filter.test(element)) arrayList.add(mapper.apply(element)); // Empty Optimization (throw away, completely, the reference, use static-constant) this.arrayList = (arrayList.size() == 0) ? ((ArrayList<E>) EMPTY_ARRAY_LIST) : arrayList;
-
ReadOnlyArrayList
@SafeVarargs public ReadOnlyArrayList(E... elements)
BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.- Parameters:
elements
- A Var-Args list, or an actual array, of elements all of which are instances of type'E'
(or a sub-class of'E'
).
Due to the occasional difficulties in using Generic-Type Parameters with arrays, there are two variants of this method, one which accepts a Var-Args Array of typejava.lang.Object
, and one which accepts a Var-Args Array of Generic / Parameterized Type type'E'
.
For the method-variant that accepts an array ofObject
, it is obligatory to provide some common super-type, of your own choosing, in order to specify the final type of theReadOnlyArrayList
. For the variant that accepts Generic-ArrayE...
, aReadOnlyArrayList<E>
is constructed.- Code:
- Exact Constructor Body:
fromBuilderOrArrayList = false; if (elements.length == 0) this.arrayList = (ArrayList<E>) EMPTY_ARRAY_LIST; else { this.arrayList = new ArrayList<>(elements.length); for (E e : elements) this.arrayList.add(e); }
-
ReadOnlyArrayList
@SafeVarargs ublic ReadOnlyArrayList (int dummy, java.util.function.Function<? super T,? extends E> mapper, T... elements)
BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.- Type Parameters:
T
- The type of the elements inside the User-Provided Var-Args ArrayT..
. These elements will not actually be inserted into the internalArrayList
, but rather will first be converted by the'mapper'
to chosen / destination type'E'
.- Parameters:
dummy
- To escape the clutches of Compiler-Messages about Generic-Erasure and Name-Clashes - this integer parameter is needed. Any value at all may passed here; it's always ignored!mapper
- A function used to map each element of arrayT...
into the object instances used by theReadOnlyArrayList's
actual Generic-Type, which is'E'
.
If this parameter is passed null, this method will throw aNullPointerException
.elements
- A Var-Args list, or an actual array, of elements all of which are instances of type'E'
(or a sub-class of'E'
).
Due to the occasional difficulties in using Generic-Type Parameters with arrays, there are two variants of this method, one which accepts a Var-Args Array of typejava.lang.Object
, and one which accepts a Var-Args Array of Generic / Parameterized Type type'E'
.
For the method-variant that accepts an array ofObject
, it is obligatory to provide some common super-type, of your own choosing, in order to specify the final type of theReadOnlyArrayList
. For the variant that accepts Generic-ArrayE...
, aReadOnlyArrayList<E>
is constructed.- Throws:
java.lang.NullPointerException
- If'mapper'
is passed null.- Code:
- Exact Constructor Body:
Objects.requireNonNull(mapper, ROHelpers.NULL_MSG + "'mapper'"); fromBuilderOrArrayList = false; if (elements.length == 0) this.arrayList = (ArrayList<E>) EMPTY_ARRAY_LIST; else { this.arrayList = new ArrayList<>(elements.length); for (T t : elements) this.arrayList.add(mapper.apply(t)); }
-
ReadOnlyArrayList
@SafeVarargs public ReadOnlyArrayList(java.util.function.Predicate<? super E> filter, E... elements)
BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.- Parameters:
filter
- This JavaPredicate
(with Generic-Type'E'
) can be used to filter the input Data-Structure content, such that elements which do not pass this filter's'test'
method are eliminated from the finalReadOnlyArrayList
instance.
This parameter may not be null, or aNullPointerException
will throw. If filtering the input data isn't necessary, this class also provides another constructor that is identical to this, but has one fewer parameter - leaving out this'filter'
Predicate.elements
- A Var-Args list, or an actual array, of elements all of which are instances of type'E'
(or a sub-class of'E'
).
Due to the occasional difficulties in using Generic-Type Parameters with arrays, there are two variants of this method, one which accepts a Var-Args Array of typejava.lang.Object
, and one which accepts a Var-Args Array of Generic / Parameterized Type type'E'
.
For the method-variant that accepts an array ofObject
, it is obligatory to provide some common super-type, of your own choosing, in order to specify the final type of theReadOnlyArrayList
. For the variant that accepts Generic-ArrayE...
, aReadOnlyArrayList<E>
is constructed.- Throws:
java.lang.NullPointerException
- If'filter'
is passsed null.- Code:
- Exact Constructor Body:
Objects.requireNonNull(filter, ROHelpers.NULL_MSG + "'filter'"); fromBuilderOrArrayList = false; ArrayList<E> arrayList = new ArrayList<>(elements.length); for (E e : elements) if (filter.test(e)) arrayList.add(e); // Empty Optimization (throw away, completely, the reference, use static-constant) this.arrayList = (arrayList.size() == 0) ? ((ArrayList<E>) EMPTY_ARRAY_LIST) : arrayList;
-
ReadOnlyArrayList
@SafeVarargs ublic ReadOnlyArrayList (java.util.function.Predicate<? super T> filter, java.util.function.Function<? super T,? extends E> mapper, T... elements)
BuildsReadOnlyArrayList<E>
instance having Generic-Type'E'
, and contents'elements'
.- Type Parameters:
T
- The type of the elements inside the User-Provided Var-Args ArrayT..
. These elements will not actually be inserted into the internalArrayList
, but rather will first be converted by the'mapper'
to chosen / destination type'E'
.- Parameters:
filter
- This JavaPredicate
(with Generic-Type'T'
) can be used to filter the input Data-Structure content, such that elements which do not pass this filter's'test'
method are eliminated from the finalReadOnlyArrayList
instance.
This parameter may not be null, or aNullPointerException
will throw. If filtering the input data isn't necessary, this class also provides another constructor that is identical to this, but has one fewer parameter - leaving out this'filter'
Predicate.mapper
- A function used to map each element of arrayT...
into the object instances used by theReadOnlyArrayList's
actual Generic-Type, which is'E'
.
If this parameter is passed null, this method will throw aNullPointerException
.elements
- A Var-Args list, or an actual array, of elements all of which are instances of type'E'
(or a sub-class of'E'
).
Due to the occasional difficulties in using Generic-Type Parameters with arrays, there are two variants of this method, one which accepts a Var-Args Array of typejava.lang.Object
, and one which accepts a Var-Args Array of Generic / Parameterized Type type'E'
.
For the method-variant that accepts an array ofObject
, it is obligatory to provide some common super-type, of your own choosing, in order to specify the final type of theReadOnlyArrayList
. For the variant that accepts Generic-ArrayE...
, aReadOnlyArrayList<E>
is constructed.- Throws:
java.lang.NullPointerException
- If either'mapper'
or'filter'
are passed null- Code:
- Exact Constructor Body:
Objects.requireNonNull(mapper, ROHelpers.NULL_MSG + "'mapper'"); Objects.requireNonNull(filter, ROHelpers.NULL_MSG + "'filter'"); fromBuilderOrArrayList = false; ArrayList<E> arrayList = new ArrayList<>(elements.length); for (T t : elements) if (filter.test(t)) arrayList.add(mapper.apply(t)); // Empty Optimization (throw away, completely, the reference, use static-constant) this.arrayList = (arrayList.size() == 0) ? ((ArrayList<E>) EMPTY_ARRAY_LIST) : arrayList;
-
ReadOnlyArrayList
public ReadOnlyArrayList(java.lang.Object primitiveArray)
Converts a Java Primitive-Array to aReadOnlyArrayList<E>
, where'E'
is the Java Boxed-Type which corresponds to the Primitive-Array's Type.
Return-Type Heuristic:
The heuristic for the kind ofReadOnlyArrayList
returned is directly analgous to Java's Auto-Boxing and Unboxing logic. Please review the table below - this is (hopefully) extremely simple to understand.Primitive-Array Return-Type int[] ReadOnlyArrayList<Integer> long[] ReadOnlyArrayList<Long> short[] ReadOnlyArrayList<Short> byte[] ReadOnlyArrayList<Byte> double[] ReadOnlyArrayList<Double> float[] ReadOnlyArrayList<Float> boolean[] ReadOnlyArrayList<Boolean> char[] ReadOnlyArrayList<Character> - Parameters:
primitiveArray
- This must be a One-Dimensional Java Primitive-Array.
This parameter, essentially, is limited to one of the 8 following types:int[], long[], short[], byte[], double[], float[], boolean[]
andchar[]
.
If an Object-Instance whose type is not one of the above 8 listed possibilities is passed to this parameter, this constructor will immediately throw aClassCastException
. This Class Generic-Type Parameter'E'
is chosen by the inner-helper method, listed in the source-code below,'ROHelpers.buildROListOrSet'
.- Throws:
java.lang.ClassCastException
- If'primitiveArray'
cannot be cast to a One-Dimensional, Java Primitive-Array.java.lang.NullPointerException
- If'primitiveArray'
is passed null;- Code:
- Exact Constructor Body:
fromBuilderOrArrayList = false; ArrayList<E> al = ROHelpers.buildROListOrSet( primitiveArray, (int arrayLen) -> new ArrayList<E>(arrayLen), null ); // Empty Optimization (throw away, completely, the reference, use static-constant) this.arrayList = (al.size() == 0) ? ((ArrayList<E>) EMPTY_ARRAY_LIST) : al;
-
ReadOnlyArrayList
public ReadOnlyArrayList(java.lang.Object primitiveArray, java.util.function.Predicate<?> filter)
Converts a Java Primitive-Array to aReadOnlyArrayList<E>
, where'E'
is the Java Boxed-Type which corresponds to the Primitive-Array's Type - but also accepts a'filter'
that can remove any array-entries that need to be removed.
Return-Type Heuristic:
The heuristic for the kind ofReadOnlyArrayList
returned is directly analgous to Java's Auto-Boxing and Unboxing logic. Please review the table below - this is (hopefully) extremely simple to understand.Primitive-Array Return-Type int[] ReadOnlyArrayList<Integer> long[] ReadOnlyArrayList<Long> short[] ReadOnlyArrayList<Short> byte[] ReadOnlyArrayList<Byte> double[] ReadOnlyArrayList<Double> float[] ReadOnlyArrayList<Float> boolean[] ReadOnlyArrayList<Boolean> char[] ReadOnlyArrayList<Character> - Parameters:
primitiveArray
- This must be a One-Dimensional Java Primitive-Array.
This parameter, essentially, is limited to one of the 8 following types:int[], long[], short[], byte[], double[], float[], boolean[]
andchar[]
.
If an Object-Instance whose type is not one of the above 8 listed possibilities is passed to this parameter, this constructor will immediately throw aClassCastException
. This Class Generic-Type Parameter'E'
is chosen by the inner-helper method, listed in the source-code below,'ROHelpers.buildROListOrSet'
.filter
- The JavaPredicate
passed to this parameter must have atest(...)
method that can handle input-references of the Java Boxed-Type that corresponds to the Java-Primitive Type used in parameter'primitiveArray'
.
In English this means, If you have pased anint[]
-Array to'primitiveArray'
, and would like to filter some of the elements out of yourReadOnlyArrayList
, then you should pass aPredicate<java.lang.Integer>
to this parameter.
If you have passed achar[]
-Array, then this parameter should be aPredicate<java.lang.Character>
- and so on and so forth...
NOTE: This is, indeed, a Run-Time rather than a Compile-Time Type-Solution. If you would like to know what that means (in plain English), it is as follows: There isn't a way to request that the Java-Compiler ensure, and print error-messages on error, that you have passed aPredicate<Integer>
for anint[]
-Array and aPredicate<Float>
for afloat[]
-Array.
If an erroneousPredicate
is passed to parameter'filter'
, then, during Run-Time, aClassCastException
will throw - rather than having a Compile-Time Error generated.- Throws:
java.lang.ClassCastException
- If'primitiveArray'
cannot be cast to a One-Dimensional, Java Primitive-Array.java.lang.NullPointerException
- If'primitiveArray'
is passed null;- Code:
- Exact Constructor Body:
Objects.requireNonNull(filter, ROHelpers.NULL_MSG + "'filter'"); fromBuilderOrArrayList = false; ArrayList<E> al = ROHelpers.buildROListOrSet( primitiveArray, (int arrayLen) -> new ArrayList<E>(arrayLen), filter ); // Empty Optimization (throw away, completely, the reference, use static-constant) this.arrayList = (al.size() == 0) ? ((ArrayList<E>) EMPTY_ARRAY_LIST) : al;
-
-
Method Detail
-
emptyROAL
public static <T> ReadOnlyArrayList<T> emptyROAL()
-
streamCollector
public static <T> java.util.stream.Collector<T,ROArrayListBuilder<T>,ReadOnlyArrayList<T>> streamCollector (java.util.stream.Collector.Characteristics... characteristics)
For use with a the Java Stream method'collect(Collector c)'
. When used to collect a stream, this collector's'finisher'
method will return an instance ofReadOnlyArrayList
(having whatever Generic-Type the Input-Stream actually is).
Example:
ReadOnlyArrayList<String> roal = someJavaDataStructure .stream() .filter(someTestPredicate) .map((X x) -> x.toString()) .collect(ReadOnlyArrayList.streamCollector());
- Type Parameters:
T
- This is the Generic-Type of the Input-Stream. It will also be the Generic-Type of theReadOnlyArrayList
that's returned from the stream'scollect
method.- Parameters:
characteristics
- Optional Characteristics List. See Java Stream-API Documentation onCollector.Characteristics
inner-class for more details.- Returns:
- This returns a collector that may be piped into a stream's
'collect'
method, as in the example, above. - Code:
- Exact Method Body:
return Collector.of( ROArrayListBuilder<T>::new, // The "Supplier" (builds a new ROArrayListBuilder) ROArrayListBuilder<T>::add, // The "Accumulator" (adds elements to the builder) // Oracle Making Life Difficult - It should be the line below, but, alas, it is not! // ROArrayListBuilder<T>::addAll, // The "Combiner" (combines two ROArrayListBuilders) // // In Stream.collect(), the 3rd parameter - the "combiner" - is a "BiConsumer<R, R>" // NOTE: A "BiConsumer" is a FunctionalInterface that does not return anything - it is // (obviously) a "void" return method! // // **BUT** // // In Collector.of, the 3rd parameter - the "combiner" - is a "BinaryOperation<R>" (ROArrayListBuilder<T> roalb1, ROArrayListBuilder<T> roalb2) -> { roalb1.addAll(roalb2); return roalb1; }, ROArrayListBuilder<T>::build, // The "Finisher" (Converts Builder to ReadOnlyArrayList) characteristics );
-
cloneToArrayList
public java.util.ArrayList<E> cloneToArrayList()
Clone's'this'
instance internalArrayList<E>
field, and returns it. This method generates a Read / Write Cloned Version of'this'
instance' internalReadOnlyArrayList
. The instance that's returned by this method is a clone, and this decision preserves the immutable (Read-Only) protection offered by this class.
Standard JDK ArrayList
The returned object is a Standard JDKArrayList
data-structure (the one from packagejava.util
). It is mutable, but again because it is a clone of'this'
instance's internalArrayList
, it is not actually 'linked' to the internalArrayList
This does mean that changes to the returnedArrayList
instance will not be reflected to the'this' ReadOnlyArrayList
. They are, in fact, two independent and unlinked copies of the internal data.- Returns:
- An independent, mutable copy of
'this'
instance' internalArrayList<E>
data-structure. - Code:
- Exact Method Body:
return fromBuilderOrArrayList ? new ArrayList<E>(this.arrayList) : (ArrayList<E>) this.arrayList.clone();
-
wrapToImmutableList
public java.util.List<E> wrapToImmutableList()
Invokesjava.util.Collections.unmodifiableList
on the internalArrayList
.
Standard JDKList
:
There may be situations where the TypeReadOnlyArrayList
is simply not usable with an API that can't be adapted to accept Type's from the Java-HTMLReadOnly
Package. If such a case arises, this method can be used to generate an immutable instance of a JDK-Standardjava.util
Type, which does not inherit fromTorello.Java.ReadOnly
Classjava.util.Collections
offers a method that wraps a type into an Unmodifiable-Wrapper that implements the standardjava.util.List
, but throws an exception if any attempts are made to invoke Mutator-Methods.
Unmodifiable-Collections throw Exceptions instead:
The returnedjava.util.List
instance will hopefully provide an acceptable substitute whenReadOnly
Type's cannot match an API's requirements. Java's Immutable-Wrappers work on a different principle - these classes retain any / all Mutator-Methods amongst their Type-Members, but instead throw anUnsupportedOperationException
if any of those methods are invoked!
Also, if a Java Collections FrameworkUnmodifiable
-Class has any Member-Methods that return a "View" into the underlying Data-Structure, the Sub-Lists and Sub-Maps returned by those methods are also, subsequently, wrapped in anUnmodifiable
-Wrapper. These returned instances will also throw anUnsupportedOperationException
if any of those methods are invoked!
This does provide a shield or layer of protection against modification to guarantee the "Immutability-Contract" offered by these classes, all-the-while returning to native Java API Collection Types, rather thanTorello.Java.ReadOnly
Types, which may not always be compatible with a given API or Interface requirement!
Remember, many of the Data-Classes insidejava.util
have methods whose documentation state very clearly that "any changes made the this [View] will be pushed back into the original type."- Returns:
- A
List
which adheres to the JDK interfacejava.util.List
, but throws anUnsupportedOperationException
if a user attempts to invoke a Mutator-Method on the returned instance. - Code:
- Exact Method Body:
return Collections.unmodifiableList(this.arrayList);
-
size
public int size()
Returns the number of elements in this list.- Specified by:
size
in interfaceReadOnlyCollection<E>
- Specified by:
size
in interfaceReadOnlyList<E>
- Returns:
- the number of elements in this list
- Code:
- Exact Method Body:
return this.arrayList.size();
-
isEmpty
public boolean isEmpty()
ReturnsTRUE
if this list contains no elements.- Specified by:
isEmpty
in interfaceReadOnlyCollection<E>
- Specified by:
isEmpty
in interfaceReadOnlyList<E>
- Returns:
TRUE
if this list contains no elements- Code:
- Exact Method Body:
return this.arrayList.isEmpty();
-
contains
public boolean contains(java.lang.Object o)
ReturnsTRUE
if this list contains the specified element. More formally, returnsTRUE
if and only if this list contains at least one elemente
such thatObjects.equals(o, e)
.- Specified by:
contains
in interfaceReadOnlyCollection<E>
- Specified by:
contains
in interfaceReadOnlyList<E>
- Parameters:
o
- element whose presence in this list is to be tested- Returns:
TRUE
if this list contains the specified element- Code:
- Exact Method Body:
return this.arrayList.contains(o);
-
indexOf
public int indexOf(java.lang.Object o)
Returns the index of the first occurrence of the specified element in this list, or-1
if this list does not contain the element. More formally, returns the lowest indexi
such thatObjects.equals(o, get(i))
, or-1
if there is no such index.- Specified by:
indexOf
in interfaceReadOnlyList<E>
- Parameters:
o
- element to search for- Returns:
- the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element
- Code:
- Exact Method Body:
return this.arrayList.indexOf(o);
-
lastIndexOf
public int lastIndexOf(java.lang.Object o)
Returns the index of the last occurrence of the specified element in this list, or-1
if this list does not contain the element. More formally, returns the highest indexi
such thatObjects.equals(o, get(i))
, or-1
if there is no such index.- Specified by:
lastIndexOf
in interfaceReadOnlyList<E>
- Parameters:
o
- element to search for- Returns:
- the index of the last occurrence of the specified element in this list, or -1 if this list does not contain the element
- Code:
- Exact Method Body:
return this.arrayList.lastIndexOf(o);
-
toArray
public java.lang.Object[] toArray()
Returns an array containing all of the elements in this list in proper sequence (from first to last element).
The returned array will be "safe" in that no references to it are maintained by this list. (In other words, this method must allocate a new array). The caller is thus free to modify the returned array.
This method acts as bridge between array-based and collection-based APIs.- Specified by:
toArray
in interfaceReadOnlyCollection<E>
- Specified by:
toArray
in interfaceReadOnlyList<E>
- Returns:
- an array containing all of the elements in this list in proper sequence
- Code:
- Exact Method Body:
return this.arrayList.toArray();
-
toArray
public <T> T[] toArray(T[] a)
Returns an array containing all of the elements in this list in proper sequence (from first to last element); the runtime type of the returned array is that of the specified array. If the list fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this list.
If the list fits in the specified array with room to spare (i.e., the array has more elements than the list), the element in the array immediately following the end of the collection is set tonull
. (This is useful in determining the length of the list only if the caller knows that the list does not contain any null elements.)- Specified by:
toArray
in interfaceReadOnlyCollection<E>
- Specified by:
toArray
in interfaceReadOnlyList<E>
- Type Parameters:
T
- the component type of the array to contain the collection- Parameters:
a
- the array into which the elements of the list are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.- Returns:
- an array containing the elements of the list
- Throws:
java.lang.ArrayStoreException
- if the runtime type of the specified array is not a supertype of the runtime type of every element in this listjava.lang.NullPointerException
- if the specified array is null- Code:
- Exact Method Body:
return this.arrayList.toArray(a);
-
get
public E get(int index)
Returns the element at the specified position in this list.- Specified by:
get
in interfaceReadOnlyList<E>
- Parameters:
index
- index of the element to return- Returns:
- the element at the specified position in this list
- Throws:
java.lang.IndexOutOfBoundsException
- if the index is out of range (index < 0 || index >= size()
)- Code:
- Exact Method Body:
return this.arrayList.get(index);
-
forEach
-
spliterator
public java.util.Spliterator<E> spliterator()
Utilizes this class private, internal'arrayList'
field to generate aSpliterator
.- Specified by:
spliterator
in interfacejava.lang.Iterable<E>
- Specified by:
spliterator
in interfaceReadOnlyCollection<E>
- Specified by:
spliterator
in interfaceReadOnlyList<E>
- Returns:
- a
Spliterator
over the elements in this list - Code:
- Exact Method Body:
return this.arrayList.spliterator();
-
listIterator
public ReadOnlyListIterator<E> listIterator(int index)
Returns a list iterator over the elements in this list (in proper sequence), starting at the specified position in the list. The specified index indicates the first element that would be returned by an initial call tonext
. An initial call toprevious
would return the element with the specified index minus one.- Specified by:
listIterator
in interfaceReadOnlyList<E>
- Parameters:
index
- index of the first element to be returned from the list iterator (by a call tonext
)- Returns:
- a list iterator over the elements in this list (in proper sequence), starting at the specified position in the list
- Throws:
java.lang.IndexOutOfBoundsException
- if the index is out of range (index < 0 || index > size()
)- Code:
- Exact Method Body:
return InterfaceBuilder.toReadOnlyListIterator( fromBuilderOrArrayList ? ((ROArrayListBuilder<E>) this.arrayList)._listIterator(index, friendClassBadge) : this.arrayList.listIterator(index) );
-
listIterator
public ReadOnlyListIterator<E> listIterator()
Returns a list iterator over the elements in this list (in proper sequence).- Specified by:
listIterator
in interfaceReadOnlyList<E>
- Returns:
- a list iterator over the elements in this list (in proper sequence)
- See Also:
listIterator(int)
- Code:
- Exact Method Body:
return InterfaceBuilder.toReadOnlyListIterator( fromBuilderOrArrayList ? ((ROArrayListBuilder<E>) this.arrayList)._listIterator(friendClassBadge) : this.arrayList.listIterator() );
-
iterator
public RemoveUnsupportedIterator<E> iterator()
Returns an iterator over the elements in this list in proper sequence.- Specified by:
iterator
in interfacejava.lang.Iterable<E>
- Specified by:
iterator
in interfaceReadOnlyCollection<E>
- Specified by:
iterator
in interfaceReadOnlyList<E>
- Returns:
- an iterator over the elements in this list in proper sequence
- Code:
- Exact Method Body:
return fromBuilderOrArrayList ? (RemoveUnsupportedIterator<E>) this.arrayList.iterator() : new RemoveUnsupportedIterator<E>(this.arrayList.iterator());
-
subList
public ReadOnlyList<E> subList(int fromIndex, int toIndex)
Returns a view of the portion of this list between the specified'fromIndex'
, inclusive, andtoIndex
, exclusive. (If'fromIndex'
and'toIndex'
are equal, the returned list is empty.)- Specified by:
subList
in interfaceReadOnlyList<E>
- Parameters:
fromIndex
- low endpoint (inclusive) of the subListtoIndex
- high endpoint (exclusive) of the subList- Returns:
- a view of the specified range within this list
- Throws:
java.lang.IndexOutOfBoundsException
- for an illegal endpoint index value (fromIndex < 0 || toIndex > size || fromIndex > toIndex
)java.lang.IllegalArgumentException
- Code:
- Exact Method Body:
return InterfaceBuilder.toReadOnlyList( fromBuilderOrArrayList ? ((ROArrayListBuilder<E>) this.arrayList). _subList(fromIndex, toIndex, friendClassBadge) : this.arrayList.subList(fromIndex, toIndex) );
-
containsAll
public boolean containsAll(java.util.Collection<?> c)
Description copied from interface:ReadOnlyList
ReturnsTRUE
if this list contains all of the elements of the specified collection.- Specified by:
containsAll
in interfaceReadOnlyCollection<E>
- Specified by:
containsAll
in interfaceReadOnlyList<E>
- Parameters:
c
- collection to be checked for containment in this list- Returns:
TRUE
if this list contains all of the elements of the specified collection- See Also:
ReadOnlyList.contains(Object)
- Code:
- Exact Method Body:
return this.arrayList.containsAll(c);
-
toString
public java.lang.String toString()
Returns aString
representation of thisArrayList
. TheString
representation consists of a list of the collection's elements in the order they are returned by its iterator, enclosed in square brackets ("[]"
). Adjacent elements are separated by the characters", "
(comma and space). Elements are converted toString's
as byString.valueOf(Object)
.- Overrides:
toString
in classjava.lang.Object
- Returns:
- a
String
representation of thisArrayList
- Code:
- Exact Method Body:
return this.arrayList.toString();
-
equals
public boolean equals(java.lang.Object o)
Compares the specified Object with this List for equality, as per the definition in the classjava.util.ArrayList
.- Specified by:
equals
in interfaceReadOnlyCollection<E>
- Specified by:
equals
in interfaceReadOnlyList<E>
- Overrides:
equals
in classjava.lang.Object
- Parameters:
o
- object to be compared for equality with thisReadOnlyArrayList
- Returns:
TRUE
if the specified Object is equal to this List- See Also:
Object.equals(Object)
,ReadOnlySet.equals(Object)
,ReadOnlyList.equals(Object)
- Code:
- Exact Method Body:
return ROHelpers.roListEq(this, o);
-
hashCode
public int hashCode()
Returns the hash code value for this List as per the definition in the classjava.util.ArrayList
.- Specified by:
hashCode
in interfaceReadOnlyCollection<E>
- Specified by:
hashCode
in interfaceReadOnlyList<E>
- Overrides:
hashCode
in classjava.lang.Object
- Returns:
- the hash code value for this list
- See Also:
Object.equals(Object)
,ReadOnlyList.equals(Object)
- Code:
- Exact Method Body:
return this.arrayList.hashCode();
-
-