import  java. util.  Arrays ; 
import  java. util.  Objects ; public  class  MyArrayList < E > { private  Object [ ]  elementData ;  private  int  size;  private  static  final  int  DEFAULT_CAPACITY  =  10 ;  public  boolean  add ( E  e)  { if  ( Objects . isNull ( elementData)  ||  size ==  elementData. length )  { grow ( ) ; } elementData[ size++ ]  =  e; return  true ; } public  E  get ( int  index)  { checkIndex ( index) ; return  ( E )  elementData[ index] ; } public  E  remove ( int  index)  { checkIndex ( index) ; E  oldValue =  ( E )  elementData[ index] ; int  moveSize =  size -  index -  1 ; if  ( moveSize >  0 )  { System . arraycopy ( elementData, index +  1 , elementData, index, moveSize) ; } elementData[ -- size]  =  null ; return  oldValue; } public  void  forEach ( MyConsumer < E > )  { Objects . requireNonNull ( action) ; for  ( int  i =  0 ;  i <  size;  i++ )  { action. accept ( ( E )  elementData[ i] ) ; } } private  void  grow ( )  { if  ( size ==  0 ) { elementData =  new  Object [ DEFAULT_CAPACITY ] ; }  else  { elementData =   Arrays . copyOf ( elementData, size +  ( size >>  1 ) ) ; } } private  void  checkIndex ( int  index)  { if  ( index <  0  ||  index >=  size)  { throw  new  IndexOutOfBoundsException ( "索引不合法" ) ; } } @Override public  String  toString ( )  { StringBuilder  sb =  new  StringBuilder ( ) ; sb. append ( "[" ) ; for  ( int  i =  0 ;  i <  size;  i++ )  { sb. append ( elementData[ i] ) ; if  ( i <  size -  1 )  { sb. append ( "," ) ; } } sb. append ( "]" ) ; sb. append ( "size = " ) . append ( size) ; sb. append ( " capacity = " ) . append ( elementData. length) ; return  sb. toString ( ) ; } 
} 
@FunctionalInterface 
public  interface  MyConsumer < E > { void  accept ( E  e) ; 
} 
MyArrayList < String > =  new  MyArrayList < > ( ) ; 
list. add ( "张无忌" ) ; 
list. add ( "赵敏" ) ; 
list. add ( "周芷若" ) ; 
list. add ( "小昭" ) ; 
list. add ( "殷素素" ) ; 
list. add ( "张三丰" ) ; 
list. add ( "张翠山" ) ; 
list. add ( "张无忌" ) ; 
list. add ( "赵敏" ) ; 
list. add ( "周芷若" ) ; 
list. add ( "小昭" ) ; 
System . out. println ( "list = "  +  list) ; 
list. remove ( 0 ) ; 
list. remove ( 99 ) ; 
System . out. println ( "list = "  +  list) ; 
list. forEach ( System . out:: println ) ;