线性表(Linear List)
线性表是由同一类型的数据元素构成的有序序列的线性结构。线性表中元素的个数就是线性表的长度,表的起始位置称为表头,表的结束位置称为表尾,当一个线性表中没有元素时,称为空表。
线性表功能
- 获取指定位置上的元素:直接获取线性表指定位置 i 上的元素。
- 插入元素:在指定位置 i 上插入元素。
- 删除元素:删除指定位置 i 上的元素。
- 获取长度:返回线性表的长度
顺序表
底层依然采用顺序存储实现的线性表,称为顺序表。
顺序表的插入与删除
当插入元素时,首先需要将插入位置腾出来,将原来该位置及之后的元素想后移动。
当删除元素时,因为顺序表是紧凑的,不能出现空位,此时就需要将该位置后的所有元素向前移动。
Java代码实现:
public class ArrayList<E> {//存储数据类型待定,先用泛型E
private int size = 0; //当前已经存放的元素数量
private int capacity = 10; //当前顺序表的容量
private Object[] array = new Object[capacity];//底层存放数据的数组
//插入元素方法
public void add(E element,int index){//element:插入元素,index:插入位置
if(index<0 || index>size){ //判断插入位置是否合法
throw new IndexOutOfBoundsException("插入位置非法,合法插入位置为0~"+size);
}
//数组容量扩容
if(size>=capacity){
int newcapacity = capacity*2;//扩容为原来的两倍
Object[] newArray = new Object[newcapacity];
System.arraycopy(array,0,newArray,0,size);
array = newArray;
capacity = newcapacity;
}
for(int i = size ; i > index ; i--){
array[i] = array[i-1];
}
array[index] = element;
size++;
}
//删除元素方法
public E delete(int index){//index:删除元素位置
if(index < 0||index>size-1){
throw new IndexOutOfBoundsException("删除位置非法,合法删除位置为0~"+(size-1));
}
E e = (E) array[index];
for (int i = index; i<size;i++){
array[i] = array[i+1];
}
size--;
return e;
}
//获取某一位置上的元素
public E get(int index){
E e = (E) array[index];
return e;
}
@Override
public String toString() {//重写toString 方法,打印顺序表
System.out.println("当前元素数量"+size);
System.out.println("当前顺序表容量"+capacity);
StringBuilder builder = new StringBuilder();
for(int i = 0; i<size;i++){//遍历顺序表
builder.append(array[i]).append(" ");
}
return builder.toString();
}
}
测试类
public class Main {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
for(int i = 0;i<=30;i++){
list.add(i+"",i);
}
list.add("add",3);//将字符串"add"添加到3号位置
System.out.println(list);
list.delete(3);//删除第四位元素
System.out.println(list);
System.out.println("您要查询的数为:"+list.get(5));//获取5号位置元素
}
}
结果展示