数据结构-线性表的数组实现-Java

来源:互联网 发布:java两个时间加减法 编辑:程序博客网 时间:2024/05/29 13:49

          最近系统的整理了一下数据结构与算法·这门课的知识,由于本科学习编程还是停留在C和汇编上,没有更多相关课程。于是最近自己对着书学习了一遍。我的大语言目标是Java,所以接下来所有内容全部使用Java。

package arryListDemo;public class ArrayList {private final int LEN=8;//定义数组默认长度;private Strategy strategy;//由于不同类型的比较方式不同,所以定义比较方法private int size;//定义线性表中数据元素的个数private Object[] elements;数据元素数组public ArrayList(Strategy strategy){this.strategy=strategy;size=0;elements=new Object[LEN];}public int getSize(){return size;}public boolean isEmpty() {return size==0;}public boolean contains(Object e) {for (int i = 0; i < size; i++) if (strategy.equal(e, elements[i])) return true;return false;}public int indexOf(Object e) {for (int i = 0; i < size; i++) if(strategy.equal(e,elements[i])) return i;return -1;}public void insert(int i,Object e)throws OutOfBoundaryException{if (i<0||i>size) {throw new OutOfBoundaryException("插入的序号超过了现有长度的范围");}if (size>=elements.length)expandSpace();for(int j=size;j>i;j--){elements[j]=elements[j-1];}elements[i]=e;size++;}private void expandSpace() {Object[] ass = new Object[elements.length*2];for (int i = 0; i < elements.length; i++) {ass[i]=elements[i];}elements=ass;}public boolean insertBefore(Object obj,Object e){int i=indexOf(obj);if(i<0) return false;insert(i, e);return true;}public boolean insertAfter(Object obj,Object e) {int i=indexOf(obj);if (i<0) return false;insert(i+1, e);return true;}public Object remove(int i)throws OutOfBoundaryException {if (i<0||i>=size) {throw new OutOfBoundaryException("超过了线性表的范围");}Object obj=elements[i];for (int j = i; j < size-1; j++) {elements[j]=elements[j+1];}elements[size-1]=null;return obj;}public boolean remove(Object e) {int i=indexOf(e);if (i<0) return false;remove(i);return true;}public Object replace(int i,Object e) throws OutOfBoundaryException{if(i<0||i>=size)throw new OutOfBoundaryException("序号超过了范围");Object obj=elements[i];elements[i]=e;return obj;}public Object get(int i)throws OutOfBoundaryException{if(i<0||i>=size) throw new OutOfBoundaryException("超过了界限");return elements[i];}}
以上每个方法的名字都标示了该方法的目的,所以就不一一备注。下面给出上面自定义异常的代码:

package arryListDemo;public class OutOfBoundaryException extends RuntimeException{public OutOfBoundaryException(String err){super(err);}}



0 0
原创粉丝点击