1.使用到的接口
public interface IList {
void add(int data);
// 在 pos 位置新增元素
void add(int pos, int data);
// 判定是否包含某个元素
boolean contains(int toFind);
// 查找某个元素对应的位置
int indexOf(int toFind);
// 获取 pos 位置的元素
int get(int pos);
// 给 pos 位置的元素设为 value
void set(int pos, int value);
//删除第一次出现的关键字key
void remove(int toRemove);
// 获取顺序表长度
int size();
// 清空顺序表
void clear();
// 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的
void display();
boolean isFull();
//判断是否满了
2.方法类
package 数据结构.ArrayList;
import java.util.Arrays;
public class MyArrayList implements IList{
public int[] elem;
public int useSize;
public MyArrayList() {
this.elem =new int[10];
}
@Override
public void add(int data) {
if(isFull()){
elem= Arrays.copyOf(elem,2*elem.length);
}
this.elem[useSize]=data;
this.useSize++;
}
@Override
public void add(int pos, int data) {
try {
cheackPosOfAdd(pos);
}catch (PosNotLegalException e){
e.printStackTrace();
}
if(isFull()){
elem= Arrays.copyOf(elem,2*elem.length);
}
for(int i=useSize-1;i>=pos;i--){
elem[i+1]=elem[i];
}
elem[pos]=data;
useSize++;
}
private void cheackPosOfAdd(int pos) throws PosNotLegalException{
if(pos<0||pos>useSize){
throw new PosNotLegalException("Add的Pos位置不合法");
}
}
@Override
public boolean contains(int toFind) {
for(int i=0;i<useSize;i++){
if(elem[i]==toFind){
return true;
}
}
return false;
}
@Override
public int indexOf(int toFind) {
for(int i=0;i<useSize;i++){
if(elem[i]==toFind){
return i;
}
}
return -1;
}
private void cheakPosOfGetAndSet(int pos) throws PosNotLegalException{
if(pos<0||pos>=useSize){
throw new PosNotLegalException("GetAndSet的Pos位置不合法");
}
}
@Override
public int get(int pos) {
try {
cheakPosOfGetAndSet(pos);
} catch (PosNotLegalException e) {
e.printStackTrace();
}
return elem[pos];
}
@Override
public void set(int pos, int value) {
try {
cheakPosOfGetAndSet(pos);
} catch (PosNotLegalException e) {
e.printStackTrace();
}
elem[pos]=value;
System.out.println("更换数据成功!");
}
@Override
public void remove(int toRemove) {
if(contains(toRemove)){
int ret =indexOf(toRemove);
for(int i =ret;i<elem.length-1;i++){
elem[i]=elem[i+1];
}
System.out.println("移除成功!");
useSize--;
return;
}
System.out.println("移除失败!");
return ;
}
@Override
public int size() {
return useSize;
}
@Override
public void clear() {
useSize=0;
}
@Override
public void display() {
for(int i=0;i<useSize;i++){
System.out.print(elem[i]+" ");
}
System.out.println();
}
@Override
public boolean isFull() {
/* if(this.useSize==elem.length) {
return true;
}*/
return useSize==elem.length;
}
}
3.异常类的实现
package 数据结构.ArrayList;
public class PosNotLegalException extends RuntimeException{
public PosNotLegalException(){
}
public PosNotLegalException(String msg){
super(msg);
}
}
4.测试方法的实现
尾差,位置插入以及顺序表的打印
测试非法位置插入
测试是否包含数据方法的实现
测试补不仅判断是否包含该数据,并且返回存在该数据的下标
测试得到数据以及非法位置得到数据的报错
更换数据以及非法位置更换数据
移除数据以及非法移除数据
获取当前数据个数