1.结构目录
自定义数组越界异常:
/** * @ClassName: OutOfBoundaryException * @Description: TODO 自定义的数组越界的异常* @author 萨摩耶* @date 2018年4月29日 下午3:37:11 * */@SuppressWarnings("serial")public class OutOfBoundaryException extends Exception{ public OutOfBoundaryException(String message) { super(message); }}
List接口:
/** * @ClassName: List * @Description: TODO 线性表的接口* @author 萨摩耶* @date 2018年4月29日 下午3:31:41 * */public interface List { //返回线性表的大小,即数据元素的个数 public int getSize(); //如果线性表为空返回true否则返回false public boolean isEmpty(); //判断线性表中是否包含数据元素e public boolean contains(Object e); //返回数据元素e在线性表中的位置 public int indexOf(Object e); //将数据元素e插入到线性表中i号位置 public void insert(int i,Object e)throws OutOfBoundaryException; //将数据元素e插入数据元素obj之前 public boolean insertBefore(Object obj,Object e); //经数据元素e插入数据元素obj之后 public boolean insertAfter(Object obj,Object e); //移除位置i的元素 public Object remove(int i)throws OutOfBoundaryException; //删除线性表中第一个与e相同的元素 public boolean remove(Object e); //替换线性表中序号为i的数据元素为e返回原数据元素 public Object replace(int i,Object e)throws OutOfBoundaryException; //返回线性表中序号为i的数据元素 public Object get(int i) throws OutOfBoundaryException;}
strategy配置:(利用Object类型,就会产生一个问题:int类型和String类型的比较)
public interface Strategy { //判断两个数据元素是否相等 public boolean equal(Object obj1,Object obj2); //比较两个数据元素的大小 public int compare(Object obj1,Object obj2);}
List接口的实现(ListArray.java):
public class ListArray implements List{ private final int LEN=8;// 数组的默认大小 private Strategy strategy;//数据元素的比较策略 private int size;//线性表中数据元素的个数 private Object[] elements;//数据元素数组 public ListArray(Strategy strategy) { this.strategy=strategy; this.size=0; elements=new Object[LEN]; } @Override public int getSize() { // TODO Auto-generated method stub return size; } @Override public boolean isEmpty() { // TODO Auto-generated method stub return size==0; } @Override public boolean contains(Object e) { // TODO Auto-generated method stub for(int i=0;i<size;i++) { if(strategy.equal(e,elements[i])) return true; } return false; } @Override public int indexOf(Object e) { // TODO Auto-generated method stub for(int i=0;i<size;i++) { if(strategy.equal(e,elements[i])) return i; } return -1; } @Override public void insert(int i, Object e) throws OutOfBoundaryException { // TODO Auto-generated method stub if(i<0||i>size) throw new OutOfBoundaryException("越界" ); if(size>=elements.length) expandSapce(); for(int j=size;j>i;j--) elements[j]=elements[j-1]; elements[i]=e; size++; return; } public void expandSapce() { Object[] a=new Object[elements.length*2]; for(int i=0;i<elements.length;i++) { a[i]=elements[i]; } elements=a; } @Override public boolean insertBefore(Object obj, Object e) { // TODO Auto-generated method stub int i=indexOf(obj); if(i<0) return false; try { insert(i,e); } catch (OutOfBoundaryException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return true; } @Override public boolean insertAfter(Object obj, Object e) { // TODO Auto-generated method stub int i=indexOf(obj); if(i<0) return false; try { insert(i+1,e); } catch (OutOfBoundaryException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return true; } @Override public Object remove(int i) throws OutOfBoundaryException { // TODO Auto-generated method stub if(i<0||i>size) throw new OutOfBoundaryException("越界" ); Object obj=elements[i]; for(int j=i;j<size;j++) { elements[j]=elements[j+1]; } elements[--size]=null; return obj; } @Override public boolean remove(Object e) { // TODO Auto-generated method stub int i=indexOf(e); if(i<0) return false; try { remove(i); } catch (OutOfBoundaryException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return true; } @Override public Object replace(int i, Object e) throws OutOfBoundaryException { // TODO Auto-generated method stub if(i<0||i>size) throw new OutOfBoundaryException("越界" ); Object obj=elements[i]; elements[i]=e; return obj; } @Override public Object get(int i) throws OutOfBoundaryException { // TODO Auto-generated method stub if(i<0||i>size) throw new OutOfBoundaryException("越界" ); return elements[i]; }}
策略的实现:
/** * @ClassName: IntergerStretegy * @Description: TODO 整数的比较策略* @author 萨摩耶* @date 2018年4月30日 上午9:24:42 * */public class IntergerStretegy implements Strategy{ @Override public boolean equal(Object obj1, Object obj2) { // TODO Auto-generated method stub if(obj1 instanceof Integer&&obj2 instanceof Integer) { if(obj1==obj2) return true; } return false; } @Override public int compare(Object obj1, Object obj2) { // TODO Auto-generated method stub return 0; }}
测试类:
public class Test { public static void main(String[] args) throws OutOfBoundaryException { ListArray la=new ListArray(new IntergerStretegy()); for(int i=0;i<7;i++) la.insert(i, i+1); System.out.println(la.get(6)); System.out.println(la.indexOf(5)); }}
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦