public interface ListInterface<T>{
public boolean add(T newEntry);
public boolean add(int newPosition, T newEntry);
public T remove(int givenPosition);
public void clear();
public T set(int givenPosition, T newEntry);
public T get(int givenPosition);
public boolean contains(T anEntry);
public int size();
public boolean isEmpty();
public boolean isFull();
public void display();
}
import java.io.Serializable;
public class ExpandableArrayList<T> implements ListInterface<T>, Serializable {
private T[] entry;
private int length;
private static final int InitialCapacity = 5;
public ExpandableArrayList() {
this(InitialCapacity);
}
public ExpandableArrayList(int initialCapacity) {
length = 0;
entry = (T[]) new Object[InitialCapacity];
}
public boolean add(T newEntry) {
if (isArrayFull())
doubleArray();
entry[length]=newEntry;
length++;
return true;
}
public void doubleArray() {
T[] old = entry;
int oldsize = old.length;
entry = (T[]) new Object[2 * oldsize];
for(int i=0;i<oldsize;i++)
entry[i]=old[i];
}
public void moveAdd(int newPosition)
{
for(int index=length-1;index>=newPosition;index--)
entry[index+1]=entry[index];
}
public boolean add(int newPosition, T newEntry) {
if(newPosition>=0&&newPosition<=length)
{
if(isArrayFull())
doubleArray();
moveAdd(newPosition);
entry[newPosition]=newEntry;
length++;
return true;
}
else {
System.out.println("插入的索引不存在");
return false;
}
}
public T remove(int givenPosition) {
T result=null;
if(givenPosition>=0&&givenPosition<length)
{
if(!isEmpty())
{
result=entry[givenPosition];
if(givenPosition<length-1)
moveRemove(givenPosition);
length--;
}
}
else
{
System.out.println("删除的索引不存在");
}
return result;
}
public void moveRemove(int givenPosition)
{
for(int index=givenPosition;index<length-1;index++)
entry[index]=entry[index+1];
}
public void clear() {
System.out.println("清空线性表");
length = 0;
}
public T set(int givenPosition, T newEntry) {
if(givenPosition>=0&&givenPosition<=(length-1))
{
entry[givenPosition]=newEntry;
return entry[givenPosition];
}
else {System.out.println("替换的索引不存在");
return null;
}
}
public T get(int givenPosition) {
T result = null;
if (givenPosition >= 0 && givenPosition <= (length - 1)) {
if (!isEmpty())
result = entry[givenPosition];
}
else
System.out.println("该索引不存在");
return result;
}
public boolean contains(T anEntry) {
boolean find = false;
for (int i = 0; !find && i < length; i++) {
if (anEntry.equals(entry[i]))
{
System.out.println("输入的数据存在在线性表");
find = true;
}
}
return find;
}
public int size() {
return length;
}
public boolean isEmpty() {
boolean isempty=(length==0);
if(isempty)
System.out.println(" 线性表为空 ");
else
System.out.println(" 线性表不为空 ");
return isempty;
}
public boolean isArrayFull() {
boolean isfull=(length==entry.length);
System.out.println(" 线性表满: "+isfull);
return isfull;
}
public boolean isFull() {
return false;
}
public void display() {
System.out.println("当前数组长度 : "+length );
for (int i = 0; i < length; i++)
System.out.print(entry[i]+" ");
System.out.println();
}
public static void main(String[] argv)
{
ExpandableArrayList<Integer> list=new ExpandableArrayList<Integer>();
list.add(1);
list.display();
list.add(2);
list.display();
list.add(0,3);
list.display();
System.out.println("取得 :"+list.get(0));
list.add(3,4);
list.display();
list.add(5,5);
list.display();
list.remove(2);
list.display();
list.remove(2);
list.display();
list.set(3,1);
list.add(2,2);
list.display();
list.isEmpty();
list.contains(1);
list.clear();
list.display();
list.size();
list.isEmpty();
}
}