动态数组
package com. example. bean ;
public class Array {
private int [ ] data;
private int size;
public Array ( int capacity) {
data = new int [ capacity] ;
size = 0 ;
}
public Array ( ) {
this ( 10 ) ;
}
public int getSize ( ) {
return size;
}
public int getCapacity ( ) {
return data. length;
}
public int remove ( int index) {
if ( index < 0 || index >= size) {
throw new IllegalArgumentException ( "标号错误,必须满足 index>=0 and index<=size" ) ;
}
int ret = data[ index] ;
for ( int i= index; i< size; i++ ) {
data[ i] = data[ i+ 1 ] ;
}
size-- ;
return ret;
}
public int removeFirst ( ) {
return remove ( 0 ) ;
}
public int removeLast ( ) {
return remove ( size- 1 ) ;
}
public void removeElement ( int e) {
int index = find ( e) ;
if ( index != 1 ) {
remove ( index) ;
}
}
public boolean isEmpty ( ) {
return size == 0 ;
}
public void addLast ( int e) {
add ( size, e) ;
}
public void addFirst ( int e) {
add ( 0 , e) ;
}
public void add ( int index, int e) {
if ( size == data. length) {
throw new IllegalArgumentException ( "插入错误,数组满了" ) ;
}
if ( index < 0 || index > size) {
throw new IllegalArgumentException ( "插入错误,必须满足 index>=0 and index<=size" ) ;
}
for ( int i= size; i> index; i-- ) {
data[ i] = data[ i- 1 ] ;
}
data[ index] = e;
size++ ;
}
public int get ( int index) {
if ( index < 0 || index > size) {
throw new IllegalArgumentException ( "标号错误,必须满足 index>=0 and index<=size" ) ;
}
return data[ index] ;
}
public void set ( int index, int e) {
if ( index < 0 || index > size) {
throw new IllegalArgumentException ( "标号错误,必须满足 index>=0 and index<=size" ) ;
}
data[ index] = e;
}
public boolean contains ( int e) {
for ( int i= 0 ; i< size; i++ ) {
if ( e == data[ i] ) {
return true ;
}
}
return false ;
}
public int find ( int e) {
for ( int i= 0 ; i< size; i++ ) {
if ( e == data[ i] ) {
return i;
}
}
return - 1 ;
}
@Override
public String toString ( ) {
StringBuilder res = new StringBuilder ( ) ;
res. append ( String . format ( "Array:size = %d, capacity = %d\n" , size, data. length) ) ;
res. append ( '【' ) ;
for ( int i= 0 ; i< size; i++ ) {
res. append ( data[ i] ) ;
if ( i != ( size- 1 ) ) {
res. append ( ", " ) ;
}
}
res. append ( '】' ) ;
return res. toString ( ) ;
}
}
package com. example. bean ;
public class Array < E > {
private E [ ] data;
private int size;
public Array ( int capacity) {
data = ( E [ ] ) new Object [ capacity] ;
size = 0 ;
}
public Array ( ) {
this ( 10 ) ;
}
public int getSize ( ) {
return size;
}
public int getCapacity ( ) {
return data. length;
}
public E remove ( int index) {
if ( index < 0 || index >= size) {
throw new IllegalArgumentException ( "标号错误,必须满足 index>=0 and index<=size" ) ;
}
if ( size == data. length/ 4 && data. length / 2 != 0 ) {
resize ( data. length/ 2 ) ;
}
E ret = data[ index] ;
for ( int i= index+ 1 ; i< size; i++ ) {
data[ i- 1 ] = data[ i] ;
}
size-- ;
data[ size] = null ;
return ret;
}
public E removeFirst ( ) {
return remove ( 0 ) ;
}
public E removeLast ( ) {
return remove ( size- 1 ) ;
}
public void removeElement ( E e) {
int index = find ( e) ;
if ( index != - 1 ) {
remove ( index) ;
}
}
public boolean isEmpty ( ) {
return size == 0 ;
}
public void addLast ( E e) {
add ( size, e) ;
}
public void addFirst ( E e) {
add ( 0 , e) ;
}
public void add ( int index, E e) {
if ( index < 0 || index > size) {
throw new IllegalArgumentException ( "插入错误,必须满足 index>=0 and index<=size" ) ;
}
if ( size == data. length) {
resize ( 2 * data. length) ;
}
for ( int i= size; i> index; i-- ) {
data[ i] = data[ i- 1 ] ;
}
data[ index] = e;
size++ ;
}
public E get ( int index) {
if ( index < 0 || index > size) {
throw new IllegalArgumentException ( "标号错误,必须满足 index>=0 and index<=size" ) ;
}
return data[ index] ;
}
public void set ( int index, E e) {
if ( index < 0 || index > size) {
throw new IllegalArgumentException ( "标号错误,必须满足 index>=0 and index<=size" ) ;
}
data[ index] = e;
}
public boolean contains ( E e) {
for ( int i= 0 ; i< size; i++ ) {
if ( data[ i] . equals ( e) ) {
return true ;
}
}
return false ;
}
public int find ( E e) {
for ( int i= 0 ; i< size; i++ ) {
if ( data[ i] . equals ( e) ) {
return i;
}
}
return - 1 ;
}
@Override
public String toString ( ) {
StringBuilder res = new StringBuilder ( ) ;
res. append ( String . format ( "Array:size = %d, capacity = %d\n" , size, data. length) ) ;
res. append ( '【' ) ;
for ( int i= 0 ; i< size; i++ ) {
res. append ( data[ i] ) ;
if ( i != ( size- 1 ) ) {
res. append ( ", " ) ;
}
}
res. append ( '】' ) ;
return res. toString ( ) ;
}
private void resize ( int newCapacity) {
E [ ] newData = ( E [ ] ) new Object [ newCapacity] ;
for ( int i= 0 ; i< size; i++ ) {
newData[ i] = data[ i] ;
}
data = newData;
}
}