Java实现动态数组
public class MyArray < T> {
int size;
T [ ] data;
public MyArray ( int capacity) {
size = 0 ;
this . data = ( T[ ] ) new Object [ capacity] ;
}
public MyArray ( ) {
this ( 10 ) ;
}
public boolean isEmpty ( ) {
return size == 0 ;
}
public int getCapacity ( ) {
return data. length;
}
public void addLast ( T element) {
addPosition ( size, element) ;
}
public void addPosition ( int index, T element) {
if ( index < 0 || index > size) {
throw new ArrayIndexOutOfBoundsException ( "索引不在数组有效索引之内!" ) ;
}
if ( size == data. length) {
reCapacity ( getCapacity ( ) << 1 ) ;
}
for ( int i = size; i > index; i-- ) {
data[ i] = data[ i- 1 ] ;
}
data[ index] = element;
size ++ ;
}
private void reCapacity ( int newCapacity) {
T[ ] newData = ( T[ ] ) new Object [ newCapacity] ;
System. arraycopy ( data, 0 , newData, 0 , size) ;
data = newData;
}
public void addHeader ( T element) {
addPosition ( 0 , element) ;
}
public T getElementByIndex ( int index) {
if ( index < 0 || index >= size) {
throw new ArrayIndexOutOfBoundsException ( "索引不在数组有效范围内!" ) ;
}
return data[ index] ;
}
public void setElementByIndex ( int index, T element) {
if ( index < 0 || index >= size) {
throw new ArrayIndexOutOfBoundsException ( "索引不在数组有效范围内!" ) ;
}
data[ index] = element;
}
public boolean isInclude ( T element) {
boolean flag = false ;
for ( int i = 0 ; i < size; i++ ) {
if ( data[ i] . equals ( element) ) {
flag = true ;
break ;
}
}
return flag;
}
public int searchIndexByElement ( T element) {
int flag = - 1 ;
for ( int i = 0 ; i < size; i++ ) {
if ( data[ i] . equals ( element) ) {
flag = i;
break ;
}
}
return flag;
}
public T deleteElementByIndex ( int index) {
if ( index < 0 || index >= size) {
throw new ArrayIndexOutOfBoundsException ( "索引位置不在数组有效范围内!" ) ;
}
T number = data[ index] ;
for ( int i = index; i < size- 1 ; i++ ) {
data[ i] = data[ i+ 1 ] ;
}
data[ size- 1 ] = null;
size-- ;
if ( size == getCapacity ( ) / 3 && ( getCapacity ( ) >> 1 ) > 10 ) {
reCapacity ( getCapacity ( ) >> 1 ) ;
}
return number;
}
public T deleteLastElement ( ) {
return deleteElementByIndex ( size- 1 ) ;
}
public T deleteFirstElement ( ) {
return deleteElementByIndex ( 0 ) ;
}
public void deleteElement ( T element) {
deleteElementByIndex ( searchIndexByElement ( element) ) ;
}
@Override
public String toString ( ) {
StringBuffer str = new StringBuffer ( ) ;
str. append ( "数组容量为" + getCapacity ( ) + ",数组内的有效元素有" + size+ "个" + "\n" ) ;
str. append ( "数组为[" ) ;
for ( int i = 0 ; i < size; i++ ) {
if ( i == size- 1 ) {
str. append ( getElementByIndex ( i) ) ;
} else {
str. append ( getElementByIndex ( i) + "," ) ;
}
}
str. append ( "]" ) ;
return str. toString ( ) ;
}
}