用数组写了一个线性表,但是没有测试,如果有问题,会在后面或回复指出。
public interface List<T> {
public boolean add(T newEntry);
public void add(int index, T newEntry);
public T remove(int index);
public void clear();
public T set(int index, T entry);
public T get(int index);
public boolean contains(T entry);
public int size();
public boolean isEmpty();
}
public class MyArrayList<T> implements List<T> {
private T[] array;
private int length; //存放数组中实际元素的个数
private int size; //存放数组的长度
private static final int MAX_SIZE = 50; //数组的默认长度
public MyArrayList() {
this(MAX_SIZE);
}
public MyArrayList(int size) {
length = 0;
this.size = size;
array = (T[]) new Object[size];//注意创建泛型数组或引用对象时,使用此种方式
}
//判断当前数组是否已经装满
public boolean isFull() {
return length == size ? true : false;
}
public void doubleArray() {
T[] oldList = array;
array = (T[]) new Object[oldList.length * 2];
for(int i = 0; i < oldList.length; i++) {
array[i] = oldList[i];
}
}
@Override
public boolean add(T newEntry) {
if(isFull()) {
size = array.length * 2;
doubleArray();
}
array[length++] = newEntry;
return true;
}
@Override
public void add(int index, T newEntry) { //index是数组的下标,从0开始的
if(isFull()) {
size = array.length * 2;
doubleArray();
}
for(int i = array.length; i > index; i--) {
array[i] = array[i - 1];
}
array[index] = newEntry;
}
@Override
public T remove(int index) {
if(isEmpty()) {
return null;
}
else{
T tmp = array[index];
for(int i = index; i < length; i++) {
array[i] = array[i + 1];
}
return tmp;
}
}
@Override
public void clear() {
for(int i = 0; i < length; i++)
array[i] = null;
length = 0;
}
@Override
public T set(int index, T entry) {
if(index < 0 || index > length - 1)
return null;
else {
T tmp = array[index];
array[index] = entry;
return tmp;
}
}
@Override
public T get(int index) {
if(index < 0 || index > length - 1)
return null;
else
return array[index];
}
@Override
public boolean contains(T entry) {
boolean found = false;
for(int i = 0; i < length; i++)
if(entry.equals(array[i]))
found = true;
return found;
}
@Override
public int size() {//返回已经存放了多少数据,而不是数组的存储长度
return length;
}
@Override
public boolean isEmpty() {
return length == 0 ? true : false;
}
}