JAVA—手写ArrayList
List接口
public interface List {
public int size ( ) ;
public Object get ( int i) ;
public boolean isEmpty ( ) ;
public boolean contains ( Object e) ;
public int indexOf ( Object e) ;
public void add ( int i, Object e) ;
public void add ( Object e) ;
public boolean addBefore ( Object obj, Object e) ;
public boolean addAfter ( Object obj, Object e) ;
public Object remove ( int i) ;
public boolean remove ( Object e) ;
public Object replace ( int i, Object e) ;
public Iterator iterator ( ) ;
}
Iterator接口:
public interface Iterator < T> {
boolean hasNext ( ) ;
T next ( ) ;
}
ArrayList类
public class ArrayList implements List {
java. util. ArrayList list = new java. util. ArrayList ( ) ;
private transient Object[ ] elementData;
private int size;
public ArrayList ( ) {
this ( 10 ) ;
}
public ArrayList ( int initialCapacity) {
if ( initialCapacity < 0 )
throw new IllegalArgumentException ( "索引小于0: " +
initialCapacity) ;
elementData = new Object [ initialCapacity] ;
}
@Override
public int size ( ) {
return size;
}
@Override
public Object get ( int i) {
if ( i > size - 1 || i < 0 )
throw new ArrayIndexOutOfBoundsException ( "数组越界了:" + i) ;
return elementData[ i] ;
}
@Override
public boolean isEmpty ( ) {
return size == 0 ;
}
@Override
public boolean contains ( Object e) {
return indexOf ( e) >= 0 ;
}
@Override
public int indexOf ( Object e) {
if ( e == null) {
for ( int i = 0 ; i < size; i++ )
if ( elementData[ i] == null)
return i;
} else {
for ( int i = 0 ; i < size; i++ )
if ( e. equals ( elementData[ i] ) )
return i;
}
return - 1 ;
}
@Override
public void add ( int i, Object e) {
grow ( ) ;
for ( int index = size - 1 ; index >= i; index-- ) {
elementData[ index + 1 ] = elementData[ index] ;
}
elementData[ i] = e;
size ++ ;
}
@Override
public void add ( Object e) {
grow ( ) ;
elementData[ size] = e;
size++ ;
}
@Override
public boolean addBefore ( Object obj, Object e) {
return false ;
}
@Override
public boolean addAfter ( Object obj, Object e) {
return false ;
}
@Override
public Object remove ( int i) {
if ( i > size - 1 )
throw new RuntimeException ( "数组越界了:" + i) ;
for ( int index = i; index < size - 1 ; index++ ) {
elementData[ index] = elementData[ index + 1 ] ;
}
size-- ;
return elementData[ i] ;
}
@Override
public boolean remove ( Object e) {
return false ;
}
@Override
public Object replace ( int i, Object e) {
return null;
}
@Override
public Iterator iterator ( ) {
return new Itr ( ) ;
}
@Override
public String toString ( ) {
StringBuilder sb = new StringBuilder ( "[" ) ;
for ( int i = 0 ; i < size; i++ ) {
sb. append ( elementData[ i] + "," ) ;
}
if ( size > 0 ) {
sb. deleteCharAt ( sb. length ( ) - 1 ) ;
}
sb. append ( "]" ) ;
return sb. toString ( ) ;
}
private void grow ( ) {
if ( size == elementData. length) {
elementData = Arrays. copyOf ( elementData, size + ( size >> 1 ) ) ;
}
}
private class Itr < T> implements Iterator < T> {
int cursor;
@Override
public boolean hasNext ( ) {
return cursor < size;
}
@Override
public T next ( ) {
if ( cursor >= size)
throw new NoSuchElementException ( "没有这个元素了:" + cursor) ;
return ( T) elementData[ cursor++ ] ;
}
}
}