您的位置:首页 > 理论基础 > 数据结构算法

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

2016-12-25 13:36 851 查看
          最近系统的整理了一下数据结构与算法·这门课的知识,由于本科学习编程还是停留在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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: