数组是一组内存地址连续的存储单元,所以用数组实现的线性表是顺序存储的。可以通过数组下标轻易的访问不同位置的数据,但要注意下标越界的异常(ArrayIndexOutOfBoundsException)
用数组实现的线性表,查询与更改方法有着优势。(因为有下标)
1.MyList接口定义功能
public interface MyList { //新增一个元素 void add(Object element); //删除与输入元素相同的元素 void delete(Object element); //根据索引删除元素 void delete(int index); //更新元素 void update(int index,Object newelement); //三种查询形式 boolean contains(Object element); Object at(int index); int indexOf(Object element);}
2.MyArrayList类实现接口功能
1 public class MyArrayList implements MyList{ 2 private Object elements[];//真正存储元素的底层结构 3 private int size;//当前的存储个数 4 private int capcity;//总容量 5 6 public MyArrayList(int capcity) 7 { 8 this.size=0; 9 this.capcity=capcity; 10 elements=new Object[capcity]; 11 } 12 public MyArrayList() 13 { 14 this(10); 15 } 16 @Override 17 public void add(Object element) { 18 if(size==capcity)//因为数组是不可变长的,所以需要进行特殊扩容 19 { 20 capcity=capcity*2; 21 Object newElements[]=new Object[capcity]; 22 for(int i=0;i=0) 36 delete(index); 37 38 39 } 40 41 @Override 42 public void delete(int index) { 43 //防复杂度的震荡 44 if(size<=capcity/4&&!(capcity/4==0)) 45 { 46 capcity=capcity/2; 47 Object newElements[]=new Object[capcity]; 48 for(int i=0;i 0)//防止下标溢出 55 { 56 for(int i=index;i =0; 74 75 76 } 77 78 @Override 79 public Object at(int index) { 80 return elements[index]; 81 } 82 83 84 @Override 85 public int indexOf(Object element) { 86 for(int i=0;i