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));
}
}