基于数组的顺序线性表的实现
来源:互联网 发布:股票回测软件 编辑:程序博客网 时间:2024/05/29 08:31
import java.util.Arrays;public class ArrayList<T> {private int DEFAULT_SIZE = 16;//保存数组长度private intcapacity;//保存顺序线性表的元素private Object[] elementData;//保存线性表当前元素的个数private int size = 0;//创建默认空顺序线性表public ArrayList(){capacity = DEFAULT_SIZE;elementData = new Object[capacity];}//以一个初始化元素创建顺序线性表public ArrayList(T element){this();elementData[0] = element;size++;}/** * 以指定长度的数组来创建顺序线性表 * @param element 顺序线性表中的第一个元素 * @param initSize 指定顺序线性表底层数组的长度 */public ArrayList(T element, int initSize){capacity = 1;//把capacity设置为大于intiSize的最小的2的n次方while(capacity < initSize){capacity <<= 1;}elementData = new Object[capacity];elementData[0] = element;size++;}//获得线性表的大小public int length(){return size;}//获得线性表中索引为i的元素public T get(int i){if(i < 0 || i>size -1){throw new IndexOutOfBoundsException("线性表索引越界");}return (T)elementData[i];}//查找顺序线性表中指定元素的索引public int locate(T elememt){for(int i = 0; i < size ; i++){if(elementData[i].equals(elememt)){return i;}}return -1;}//向顺序线性表的指定位置插入一个元素public void insert(T element, int index){if(index<0 || index>size){throw new IndexOutOfBoundsException("线性表索引越界");}ensureCapacity(size+1);//插入索引之处后的所有元素向后移动一格System.arraycopy(elementData, index, elementData, index+1, size-index);elementData[index] = element;size++;}//在线性表的开始处添加一个元素public void add(T element){insert(element,size);}private void ensureCapacity(int minCapacity) {//如果数组原长度小于所需长度if(minCapacity > capacity){while(capacity<minCapacity){capacity <<= 1;}elementData = Arrays.copyOf(elementData, capacity);}}//删除线性表中指定索引处的元素public T delete(int index){if(index<0 || index>size-1){throw new IndexOutOfBoundsException("线性表索引越界");}T oldValue = (T)elementData[index];int numMoved = size - index - 1;if(numMoved > 0){System.arraycopy(elementData, index+1, elementData, index, numMoved);}elementData[--size] = null;return oldValue;}//删除线性表的最后一个元素public T remove(){return delete(size-1);}//判断顺序线性表是否为空public boolean empty(){return size == 0;}//清空线性表public void clear(){Arrays.fill(elementData, null);size = 0;}public String toString(){if(size == 0){return "[]";} else {StringBuilder sb = new StringBuilder("{");for(int i=0;i<size;i++){sb.append(elementData[i].toString()+",");}int len = sb.length();return sb.delete(len-1, len).append("}").toString();}}}
这其实就是一个ArrayList的简单功能版
阅读全文