动态数组--java
2022-01-17 本文已影响0人
不死鸟F21
public class AnyArray<E> {
private E[]data;
private int size;
//构造函数
public AnyArray(int cap){
data = (E[]) new Object[cap];
size = 0;
}
public AnyArray(){
this(10);
}
public int getCap(){
return data.length;
}
public int getSize(){
return size;
}
public boolean inEmpty(){
return size ==0;
}
public void addLast(E e){
// if (size==data.length)
// throw new IllegalArgumentException("full....");
// data[size] = e;
// size++;
add(size,e);
}
public void addFirst(E e){
add(0,e);
}
public void add(int pos,E e){
if (pos<0|| pos>size)
throw new IllegalArgumentException("add failed, pos Error.");
if (size==data.length)
resize(data.length*2);
for (int index=size-1;index>=pos;index--){
data[index+1] =data[index]; //后移
}
data[pos] = e;
size++;
}
public void modify(int pos,E e){
if (pos<0 || pos>size)
throw new IllegalArgumentException("modfiy failed, Pos Error");
data[pos] = e ;
}
public E get(int pos){
if (pos<0 || pos>size)
throw new IllegalArgumentException("get failed, Pos Error");
return data[pos];
}
public void set(int pos, E e){
if (pos<0 || pos>size)
throw new IllegalArgumentException("set failed, Pos Error");
data[pos] = e;
}
public int find(E e){
for (int i=0;i<size;i++){
if (data[i] ==e)
return i;
}
return -1;
}
public E remove(int pos){
if (pos<0 || pos>=size)
throw new IllegalArgumentException("remove failed, Pos Error");
E pos_data = data[pos];
for (int i=pos+1;i<size;i++){
data[i-1]=data[i];
}
size--;
if (size == data.length /4 && data.length/2 !=0){
System.out.println("-- resize.....");
resize(data.length/2);
}
return pos_data;
}
public E removeFirst(){
return remove(0);
}
public void removeElement(E e){
int index = find(e);
if (index !=-1){
remove(index);
}
}
public E removeLast(){
return remove(size-1);
}
public void print(){
for (E e :data){
System.out.println(e);
}
}
public String toString(){
StringBuilder res = new StringBuilder();
res.append(String.format("Array size is %s, Cap is %s\n",size,getCap()));
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 newCap){
if (newCap ==0)
return;
System.out.println("resize......");
E[] newData = (E[]) new Object[newCap];
for (int i=0;i<size;i++)
newData[i] = data[i];
data = newData;
}
}