这一篇博客主要是关于ArrayList部分方法的重写
import java. util. Arrays ;
public class ArrayList < E > {
E [ ] elementData;
int size;
private static final int DEFAULT_CAPACITY = 10 ;
public ArrayList ( int size) {
if ( size <= 0 ) {
size = DEFAULT_CAPACITY;
}
elementData = ( E [ ] ) new Object [ size] ;
}
public boolean add ( E e) {
add ( size ( ) , e) ;
return true ;
}
public void add ( int index, E e) {
if ( index < 0 || index > size) {
throw new ArrayIndexOutOfBoundsException ( "你给的下标有问题" ) ;
}
ensureCapacity ( size) ;
for ( int i = size - 1 ; i >= index; i-- ) {
elementData[ i + 1 ] = elementData[ i] ;
}
elementData[ index] = e;
size++ ;
}
public int size ( ) {
return size;
}
public void ensureCapacity ( int size) {
int oldCapacity = elementData. length;
if ( size >= oldCapacity) {
int newCapacity = oldCapacity + ( oldCapacity >> 1 ) ;
elementData = Arrays . copyOf ( elementData, newCapacity) ;
}
}
public E remove ( int index) {
checkRange ( index) ;
E ret = elementData[ index] ;
for ( int i = index; i< size; i++ ) {
elementData[ i] = elementData[ i + 1 ] ;
}
size-- ;
return ret;
}
public void checkRange ( int index) {
if ( index < 0 || index > size) {
throw new ArrayIndexOutOfBoundsException ( "index下标越界" ) ;
}
}
public boolean remove ( E e) {
int key = indexOf ( e) ;
if ( key == - 1 ) {
return false ;
}
remove ( key) ;
return true ;
}
public int indexOf ( E e) {
for ( int i = 0 ; i < elementData. length - 1 ; i++ ) {
if ( elementData[ i] . equals ( e) ) {
return i;
}
}
return - 1 ;
}
public int lastIndexOf ( E e) {
for ( int i = elementData. length - 1 ; i > 0 ; i++ ) {
if ( elementData[ i] . equals ( e) ) {
return i;
}
}
return - 1 ;
}
public boolean contains ( E e) {
return - 1 != indexOf ( e) ;
}
public ArrayList < E > subList ( int from, int to ) {
if ( from > to ) {
throw new ArrayIndexOutOfBoundsException ( "给的下标有问题" ) ;
}
int fac = to - from;
ArrayList < E > list = new ArrayList < > ( fac) ;
while ( from < to ) {
list. add ( elementData[ from] ) ;
from++ ;
}
return list;
}
public E get ( int index) {
checkRange ( index) ;
return elementData[ index] ;
}
public void set ( int index, E e) {
checkRange ( index) ;
elementData[ index] = e;
}
public void clear ( ) {
for ( int i = 0 ; i < elementData. length; i++ ) {
elementData[ i] = null ;
}
size = 0 ;
}
public String toString ( ) {
String s = "[" ;
for ( int i = 0 ; i < elementData. length - 1 ; i++ ) {
s += elementData[ i] + "," ;
}
s += elementData[ elementData. length - 1 ] + "]" ;
return s;
}
public static void main ( String [ ] args) {
ArrayList < Integer > list1 = new ArrayList < Integer > ( 5 ) ;
list1. add ( 1 ) ;
list1. add ( 2 ) ;
list1. add ( 3 ) ;
list1. add ( 4 ) ;
list1. add ( 5 ) ;
System . out. println ( list1) ;
list1. add ( 1 , 1 ) ;
System . out. println ( list1) ;
list1. set ( 3 , 5 ) ;
System . out. println ( list1. get ( 3 ) ) ;
System . out. println ( list1) ;
list1. remove ( 1 ) ;
System . out. println ( list1) ;
ArrayList < Integer > list2 = list1. subList ( 0 , 2 ) ;
System . out. println ( list2) ;
}
}