package array;
//创建动态数组
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 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(size==data.length)
resize(2*data.length);
if(index<0||index>size) {
throw new IllegalArgumentException("add failed");
}
for(int i=size-1;i>=index;i--)
data[i+1]=data[i];
data[index]=e;
size++;
}
//获取index索引位置
public E get(int index) {
if(index<0||index>=size)
throw new IllegalArgumentException("add failed");
return data[index];
}
//修改
void set(int index,E e) {
if(index<0||index>=size)
throw new IllegalArgumentException("add failed");
data[index]=e;
}
@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();
}
//查询是否有该元素
public boolean contains(E e) {
for(int i=0;i<size;i++) {
if(data[i].equals(e))
return true;
}
return false;
}
//获得所查找到元素e所在的索引
public int find(E e) {
for(int i=0;i<size;i++) {
if(data[i].equals(e))
return i;
}
return -1;
}
//从数组中删除元素并且返回
public E remove(int index) {
if(index<0||index>=size) {
throw new IllegalArgumentException("Error");
}
E ret=data[index];
for(int i=index+1;i<size;i++)
data[i-1]=data[i];
size--;
//在此处使用防震挡处理
if(size==data.length/4&&data.length/2!=0)
resize(data.length/2);
return ret;
}
//删除需要删除的元素
public void removeElement(E e){
int index=find(e);
if(index!=-1)
remove(index);
}
//扩容函数
private void resize(int newCapacity) {
E[] newdata=(E[]) new Object[newCapacity];
for(int i=0;i<data.length;i++) {
newdata[i]=data[i];
}
data=newdata;
}
public E getLast() {
return get(size-1);
}
public E getFirst() {
return get(0);
}
public E removeLast() {
return remove(size-1);
}
public E removeFirst() {
return remove(0);
}
}
通过动态数组可以实现栈 队列等等数据结构的应用