数组实现的表find(ith)操作只需花费O(1),但是插入和删除的花费却需要昂贵的开销,这要看插入在什么地方,最坏的情况下,在为置0插入(即在表的前端插入)首先需要 将整个数组后移一位,而删除第一个元素则需要将整个数组向前移动一个位置,这两种最坏的情况的花费为O(N)。
表的代码如下:
测试以上代码:
5 3 7 7 90
3 7 7 90
3 7 98 90
表的代码如下:
public class MyArrayList<T>
{
public static final int DEFAULT_CAPACITY=10;
private int size;
private T[] items;
public void clear()
{
size=0;
ensureCapacity(DEFAULT_CAPACITY);
}
public MyArrayList()
{
clear();
}
public boolean isEmpty()
{
return size==0;
}
public int size()
{
return size;
}
public void add(T x)
{
add(size,x);
}
public T get(int idx)
{
if(idx>=size || idx<0)
{
throw new ArrayIndexOutOfBoundsException();
}
return items[idx];
}
public void set(int idx,T x)
{
if(idx>=size || idx<0)
{
throw new ArrayIndexOutOfBoundsException();
}
items[idx]=x;
}
public void remove(int idx)
{
for (int i = idx; i < size-1; i++)
{
items[i]=items[i+1];
}
size--;
}
private void add(int idx,T x)
{
if(items.length==size())
{
ensureCapacity(size*2+1);
}
for (int i = size; i >idx; i++)
{
items[i]=items[i-1];
}
items[idx]=x;
size++;
}
public void ensureCapacity(int newCapacity)
{
if(newCapacity<=size)
{
return;
}
T[] old=items;
items=(T[])new Object[newCapacity];
for (int i = 0; i < size; i++)
{
items[i]=old[i];
}
}
}
测试以上代码:
public class Text
{
public static void main(String[] args)
{
MyArrayList<Integer> list=new MyArrayList<Integer>();
list.add(5);
list.add(3);
list.add(7);
list.add(7);
list.add(90);
for (int i = 0; i <list.size() ; i++)
{
System.out.print(list.get(i)+" ");
}
System.out.println();
list.remove(0);
for (int i = 0; i < list.size(); i++)
{
System.out.print(list.get(i)+" ");
}
list.set(2, 98);
System.out.println();
for (int i = 0; i < list.size(); i++)
{
System.out.print(list.get(i)+" ");
}
}
}
输出为:
5 3 7 7 90
3 7 7 90
3 7 98 90