// Array.javapublicclassArray<E>{private E[] data;privateint size;// 构造函数,传入数组的容量capacity构造ArraypublicArray(int capacity){
data =(E[])newObject[capacity];
size =0;}// 无参数的构造函数,默认数组的容量capacity=10publicArray(){this(10);}// 获取数组的容量publicintgetCapacity(){return data.length;}// 获取数组中的元素个数publicintgetSize(){return size;}// 返回数组是否为空publicbooleanisEmpty(){return size ==0;}// 在index索引的位置插入一个新元素epublicvoidadd(int index, E e){if(index <0|| index > size)thrownewIllegalArgumentException("Add failed. Require index >= 0 and index <= size.");if(size == data.length)resize(2* data.length);for(int i = size -1; i >= index ; i --)
data[i +1]= data[i];
data[index]= e;
size ++;}// 向所有元素后添加一个新元素publicvoidaddLast(E e){add(size, e);}// 在所有元素前添加一个新元素publicvoidaddFirst(E e){add(0, e);}// 获取index索引位置的元素public E get(int index){if(index <0|| index >= size)thrownewIllegalArgumentException("Get failed. Index is illegal.");return data[index];}// 修改index索引位置的元素为epublicvoidset(int index, E e){if(index <0|| index >= size)thrownewIllegalArgumentException("Set failed. Index is illegal.");
data[index]= e;}// 查找数组中是否有元素epublicbooleancontains(E e){for(int i =0; i < size ; i ++){if(data[i].equals(e))returntrue;}returnfalse;}// 查找数组中元素e所在的索引,如果不存在元素e,则返回-1publicintfind(E e){for(int i =0; i < size ; i ++){if(data[i].equals(e))return i;}return-1;}// 从数组中删除index位置的元素, 返回删除的元素public E remove(int index){if(index <0|| index >= size)thrownewIllegalArgumentException("Remove failed. Index is illegal.");
E ret = data[index];for(int i = index +1; i < size ; i ++)
data[i -1]= data[i];
size --;
data[size]= null;// loitering objects != memory leakif(size == data.length /4&& data.length /2!=0)resize(data.length /2);return ret;}// 从数组中删除第一个元素, 返回删除的元素public E removeFirst(){returnremove(0);}// 从数组中删除最后一个元素, 返回删除的元素public E removeLast(){returnremove(size -1);}// 从数组中删除元素epublicvoidremoveElement(E e){int index =find(e);if(index !=-1)remove(index);}@Overridepublic String toString(){
StringBuilder res =newStringBuilder();
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();}// 将数组空间的容量变成newCapacity大小privatevoidresize(int newCapacity){
E[] newData =(E[])newObject[newCapacity];for(int i =0; i < size ; i ++)
newData[i]= data[i];
data = newData;}}