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();
}
}