背景
我们知道在java里面有许多数组结构,比如队列,栈等等,但是这些数据结构都是由数组、链表或者树等基本数据结构构造的。所以这里自己定义了一个扩容数组,可以用来扩展成队列或者是栈。
代码
public class UniArr<E> {
private E[] arr;
private int size;
private final int DEFAULT_CAPACITY = 10;
public UniArr() {
arr = (E[]) new Object[DEFAULT_CAPACITY];
}
public UniArr(int capacity) {
arr = (E[]) new Object[capacity];
}
private void add(int index,E e) {
if (index < 0 || index > arr.length) {
throw new IllegalArgumentException("索引异常");
}
if (size == arr.length) {
E[] newArr = (E[]) new Object[2 * size];
for (int i = 0; i < size; i++) {
newArr[i] = arr[i];
}
arr = newArr;
}
for (int i = size; i > index; i--) {
arr[i] = arr[i - 1];
}
arr[index] = e;
size++;
}
public void add(E e) {
add(size, e);
}
public E remove(int index) {
if (index < 0 || index > arr.length) {
throw new IllegalArgumentException("索引异常");
}
E e = arr[index];
for (int i = index; i < size - 1; i++) {
arr[i] = arr[i + 1];
}
arr[size-1] = null;
size--;
return e;
}
public E remove(E e) {
int i = indexOfEle(e);
return remove(i);
}
private int indexOfEle(E e) {
int index = 0;
for (int i = 0; i < size; i++) {
if (arr[i].equals(e)) {
index =i;
}
}
return index;
}
@Override
public String toString() {
StringBuilder sbr = new StringBuilder();
sbr.append("[");
for (int i = 0; i < size; i++) {
sbr.append(arr[i]);
if (i < size - 1) {
sbr.append(",");
}
}
sbr.append("]");
return sbr.toString();
}
}