【java】数组线性表的实现

来源:互联网 发布:kindle软件更新 编辑:程序博客网 时间:2024/09/21 09:27
public interface mylist<E> {public void add(E e);public void add(int index,E e);public void clear();public boolean contains(E e);public E get(int index);public int indexOf(E e);public boolean isEmpty();public int lastIndexOf(E e);public boolean remove(E e);public E remove(int index);public Object set(int index,E e);public int size();}
public abstract class myabstractlist<E> implements mylist<E>{protected int size = 0;protected myabstractlist(){}protected myabstractlist(E[] objects){for(int i = 0;i<objects.length;i++)add(objects[i]);}    public void add(E e){    add(size,e);    }    public boolean isEmpty(){    return size == 0;    }    public int size(){    return size;    }    public boolean remove(E e){    if(indexOf(e)>=0){    remove(indexOf(e));    return true;    }    else {return false;}    }}

public class myarraylist<E> extends myabstractlist<E>{public static final int INITIAL_CAPACITY = 16;private E[]data = (E[])new Object[INITIAL_CAPACITY];public myarraylist(){}public myarraylist(E[] objects){for(int i = 0;i<objects.length;i++)add(objects[i]);}public void add(int index,E e){ensureCapacity();for(int i = size-1;i>=index;i--)data[i+1] = data[i];data[index] = e;size++;}private void ensureCapacity(){if(size>=data.length){E[] newData = (E[])(new Object[size*2+1]);System.arraycopy(data,0,newData,0,size);}}public void clear(){data = (E[])new Object[INITIAL_CAPACITY];size = 0;}public boolean contains(E e){for(int i = 0;i<size;i++){if(e.equals(data[i]))return true;}return false;}public E get(int index){return data[index];}public int indexOf(E e){for(int i = 0;i<size;i++){if(e.equals(data[i]))return i;}return -1;}public int lastIndexOf(E e){for(int i = size-1;i>=0;i--){if(e.equals(data[i]))return i;}return -1;}public E remove(int index){E e = data[index];for(int j = index;j<size-1;j++)data[j]= data[j+1];data[size-1] = null;size--;return e;}public E set(int index,E e){E old = data[index];data[index] = e;return old;}public String toString(){StringBuilder result = new StringBuilder("[");for(int i = 0;i<size;i++){result.append(data[i]);if(i<size-1)result.append(",");}return result.toString()+"]";}public void trimToSize(){if(size!=data.length){E[] newData = (E[])(new Object[size]);System.arraycopy(data,0,newData,0,size);data = newData;}}}


0 0
原创粉丝点击