public class ArrayList
{
private Object[] elementData;
private size;
public ArrayList (int initalCapacity){
this .elementData = new Object[initalCapacity];
}
public boolean add (Object obj){
if (size>= elementData.length){
System.out .println("表空间已满" );
return false ;
}else {
this .elementData[size++]=obj;
}
}
public int size (){
return size;
}
public boolean isEmpty (){
return size==0 ;
}
public Object get (int index)
{
if (index<0 || index >= size){
System.out .println("索引越界" );
return ;
}
return elementData[index];
}
public void set (int index, Object obj){
if (index<0 || index >= size){
System.out .println("索引越界" );
return ;
}
elementData[index]=obj;
}
public int indexOf (Object obj){
if (obj==null ){
for (int i=0 ;i<size;i++){
if (elementData[i]==null )
return i;
}
}else {
for (int i=0 ;i<size;i++){
if (obj.equals(elementData[i]))
return i;
}
}
return -1 ;
}
public int lastIndexOf (Object o) {
if (o == null ) {
for (int i = size - 1 ; i >= 0 ; i--)
if (elementData[i] == null )
return i;
} else {
for (int i = size - 1 ; i >= 0 ; i--)
if (o.equals(elementData[i]))
return i;
}
return -1 ;
}
public void add (int index,Object obj){
if (index<0 || index >= size){
System.out .println("索引越界" );
return ;
}
if (size>= elementData.length){
System.out .println("表空间已满" );
return ;
}
for (int i=size;i>index;i--){
elementData[i]=elementData[i-1 ];
}
elementData[index]=obj;
size++;
}
public void remove (int index){
if (index<0 || index >= size){
System.out .println("索引越界" );
return ;
}
for (int i=index;i<size;i++){
a[i]=a[i+1 ];
}
size--;
}
private class Iterator
{
int cursor;
public boolean hasNext (){
return cursor !=size;
}
public Object next (){
int i= cursor;
if (i >= ArrayList.this .size)
return "NoSuchElementException" ;
cursor=i+1 ;
Object[] elementData = ArrayList.this .elementData ;
return elementData[i];
}
}
public static void main (String[] args) {
ArrayList list =new ArrayList(10 );
list.add(1 );
list.add(2 );
list.add(3 );
for (Iterator i = list.new Iterator();i.hasNext() )
System.out .println(i.next());
}
}
private static final int DEFAULT_CAPACITY = 10 ;
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
transient Object[] elementData;
public ArrayList () {
this .elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
public boolean add (E e) {
ensureCapacityInternal(size + 1 );
elementData[size++] = e;
return true ;
}
private void ensureCapacityInternal (int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
private void ensureExplicitCapacity (int minCapacity) {
modCount++;
if (minCapacity - elementData.length > 0 )
grow(minCapacity);
}
private void grow (int minCapacity) {
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1 );
if (newCapacity - minCapacity < 0 )
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0 )
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}