用数组来实现表(ArrayList)

来源:互联网 发布:java循环#拼接字符串 编辑:程序博客网 时间:2024/05/16 17:31
数组实现的表find(ith)操作只需花费O(1),但是插入和删除的花费却需要昂贵的开销,这要看插入在什么地方,最坏的情况下,在为置0插入(即在表的前端插入)首先需要 将整个数组后移一位,而删除第一个元素则需要将整个数组向前移动一个位置,这两种最坏的情况的花费为O(N)。

表的代码如下:
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 


0 0
原创粉丝点击