org.python.core
Class AbstractArray
java.lang.Object
org.python.core.AbstractArray
- Serializable
public abstract class AbstractArray
extends java.lang.Object
implements Serializable
Abstract class that manages bulk structural and data operations
on arrays, defering type-specific element-wise operations to the
subclass. Subclasses supply the underlying array and the
type-specific operations--greatly reducing the need for casting
(thus achieving array-like performances with collection-like
flexibility). Also includes
functionality to support integration with the the jdk's
collections (via methods that return a modification increment).
Subclasses will want to provide the following methods (which are
not declared in this class since subclasses should specify the
explicit return type):
<type> get(int)
void set(int, <type>)
void add(<type>)
void add(int, <type>)
<type>[] toArray()
Clone cannot be supported since the array is not held locally.
But the @link #AbstractArray(AbstractArray) constructor can be used
for suclasses that need to support clone.
This "type-specific collections" approach was originally developed
by Dennis Sosnoski, who provides a more complete library at the
referenced URL. Sosnoski's library does not integrate with the
jdk collection classes but provides collection-like classes.
AbstractArray(Class type) - Creates the managed array with a default size of 10.
|
AbstractArray(Class type, int size) - Creates the managed array with the specified size.
|
AbstractArray(Class type, int[] dimensions) - Construtor for multi-dimensional array types.
|
AbstractArray(int size) - Use when the subclass has a preexisting array.
|
AbstractArray(AbstractArray toCopy) - Since AbstractArray can support a clone method, this facilitates
sublcasses that want to implement clone (poor man's cloning).
|
void | appendArray(Object ofArrayType) - Appends the supplied array, which must be an array of the same
type as
this , to the end of this .
|
void | clear() - Set the array to the empty state, clearing all the data out and
nulling objects (or "zero-ing" primitives).
|
Object | copyArray() - Constructs and returns a simple array containing the same data as held
in this growable array.
|
int | getModCountIncr() - Returns the modification count increment, which is used by
AbstractList subclasses to adjust modCount
AbstractList uses it's modCount field
to invalidate concurrent operations (like iteration) that should
fail if the underlying array changes structurally during the
operation.
|
int | getSize() - Get the number of values currently present in the array.
|
void | remove(int index) - Remove a value from the array.
|
void | remove(int start, int stop) - Removes a range from the array at the specified indices.
|
void | replaceSubArray(Object array, int atIndex) - Allows an array type to overwrite a segment of the array.
|
void | replaceSubArray(int thisStart, int thisStop, Object srcArray, int srcStart, int srcStop) - Replace a range of this array with another subarray.
|
void | setSize(int count) - Sets the number of values currently present in the array.
|
String | toString() - Provides a default comma-delimited representation of array.
|
AbstractArray
public AbstractArray(Class type)
Creates the managed array with a default size of 10.
type
- array element type (primitive type or object class)
AbstractArray
public AbstractArray(Class type,
int size)
Creates the managed array with the specified size.
type
- array element type (primitive type or object class)size
- number of elements initially allowed in array
AbstractArray
public AbstractArray(Class type,
int[] dimensions)
Construtor for multi-dimensional array types.
For example,
char[][]
. This class only manages the
top level dimension of the array. For single dimension
arrays (the more typical usage), use the other constructors.
type
- Array element type (primitive type or object class).dimensions
- An int array specifying the dimensions. For
a 2D array, something like new int[] {10,0}
to
create 10 elements each of which can hold an reference to an
array of the same type.
Array.newInstance(java.lang.Class, int[])
AbstractArray
public AbstractArray(int size)
Use when the subclass has a preexisting array.
size
- the initial size of the array
AbstractArray
public AbstractArray(AbstractArray toCopy)
Since AbstractArray can support a clone method, this facilitates
sublcasses that want to implement clone (poor man's cloning).
Sublclasses can then do this:
public MyManagedArray(MyManagedArray toCopy) {
super(this);
this.baseArray = ()toCopy.copyArray();
this.someProp = toCopy.someProp;
}
public Object clone() {
return new MyManagedArray(this);
}
appendArray
public void appendArray(Object ofArrayType)
Appends the supplied array, which must be an array of the same
type as
this
, to the end of
this
.
AbstractList
subclasses should update their
modCount
after calling this method.
ofArrayType
- the array to append
clear
public void clear()
Set the array to the empty state, clearing all the data out and
nulling objects (or "zero-ing" primitives).
Note: This method does not set
modCountIncr
to
1
even though
java.util.ArrayList
would.
AbstractList
subclasses should update their
modCount
after calling this method.
copyArray
public Object copyArray()
Constructs and returns a simple array containing the same data as held
in this growable array.
- array containing a shallow copy of the data.
getModCountIncr
public int getModCountIncr()
Returns the modification count increment, which is used by
AbstractList
subclasses to adjust modCount
AbstractList
uses it's modCount
field
to invalidate concurrent operations (like iteration) that should
fail if the underlying array changes structurally during the
operation.
- the modification count increment (0 if no change, 1 if changed)
getSize
public int getSize()
Get the number of values currently present in the array.
remove
public void remove(int index)
Remove a value from the array. All values above the index removed
are moved down one index position.
AbstractList
subclasses should always increment
their
modCount
method after calling this, as
remove
always causes a structural modification.
index
- index number of value to be removed
remove
public void remove(int start,
int stop)
Removes a range from the array at the specified indices.
start
- inclusivestop
- exclusive
replaceSubArray
public void replaceSubArray(Object array,
int atIndex)
Allows an array type to overwrite a segment of the array.
Will expand the array if
(atIndex + 1) + ofArrayType
's length
is greater than the current length.
AbstractList
subclasses should update their
modCount
after calling this method.
replaceSubArray
public void replaceSubArray(int thisStart,
int thisStop,
Object srcArray,
int srcStart,
int srcStop)
Replace a range of this array with another subarray.
thisStart
- the start index (inclusive) of the subarray in this
array to be replacedthisStop
- the stop index (exclusive) of the subarray in this
array to be replacedsrcArray
- the source array from which to copysrcStart
- the start index (inclusive) of the replacement subarraysrcStop
- the stop index (exclusive) of the replacement subarray
setSize
public void setSize(int count)
Sets the number of values currently present in the array. If the new
size is greater than the current size, the added values are initialized
to the default values. If the new size is less than the current size,
all values dropped from the array are discarded.
AbstractList
subclasses should update their
modCount
after calling this method.
count
- number of values to be set
toString
public String toString()
Provides a default comma-delimited representation of array.
java.lang.Object.toString()
Jython homepage