1.线性表
线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表有:顺序表、链表、队列……
线性表在逻辑上是线性结构,也就是说是连续的一条直线。但是在物理结构上不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
我们来看一下顺序表和链表的区别,如下图所示:
2.顺序表
即是一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。
2.1接口的实现
public class SeqList {
private int[] array;
private int[] size;
//默认构造方法
SeqList() { }
//将顺序表底层容量设置为initcapcity
SeqList(int initcapacity) { }
//新增元素,默认在数组最后新增
public void add(int data) { }
//在pos位置新增元素
public boolean contains(int toFind) { return ture;}
//判断是否包含某个元素
public int indexOf(int toFind) {return -1;}
//查找某个元素对应的位置
public int get(int pos){return -1;}
//获取pos位置的元素
public void set(int pos,int value) { }
//给pos位置设置为value
public void remove(int toremove) { }
//删除第一次出现的关键字key
public int size() {return 0;}
//获取顺序表长度
public void clear(){ }
//清空顺序表
public void display(){ }
//打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看到测试结果给出的
}
3.ArrayList
在集合框架中,ArrayList是一个普通类,实现了List接口,具体框架如下:
需要注意的是以下几点:
- ArrayList是以泛型方式实现的,使用时必须先要实例化
- ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问
- ArrayList实现了Serializable接口,表明ArrayList是支持序列化的
- ArrayList实现了Cloneable接口,表明ArrayList是支持clone的
- 和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrrayList
- ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表