基于数组的顺序线性表的实现

来源:互联网 发布:股票回测软件 编辑:程序博客网 时间: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的简单功能版

阅读全文
'); })();
1 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小帆船图片 中国帆船 帆船英语 帆船的量词 帆船比赛 什么的帆船 一条帆船 帆船英文 帆船画 帆船鞋 裤子 帆船运动 帆船价格 帆船多少钱 双体帆船 帆船夏令营 大型帆船 帆船logo 男士帆船鞋 帆船卡通 怎样做帆船 盖伦帆船 单桅帆船 折帆船 帆船的制作 帆船怎么叠 巡航帆船 帆船装饰画 折纸帆船 比赛帆船 简笔画帆船 帆船的画法 木帆船模型 帆船卡通画 儿童画帆船 帆船鞋牌子 一分钱帆船 帆船怎么画 一艘帆船 帆船图画 画帆船 帆船蛋糕