- List接口的定义
线性结构可以由顺序存储结构和链式存储结构实现
将两者对线性结构共同的操作进行抽取,定义出线性结构的接口package p1.接口; import java.util.Comparator; //线性表接口的定义 public interface List<E> extends Iterable<E> { //默认在表尾添加一个元素 public void add(E element); //在指定角标处添加元素 public void add(int index, E element); //删除指定元素 public void remove(E element); //删除指定角标处的元素,并返回原先值 public E remove(int index); //获取指定角标元素 public E get(int index); //修改指定角标处的元素,并返回原先的值 public E set(int index, E element); //获取线性表中元素的个数 public int size(); //查看元素第一次出现的角标位置(从左到右) public int indexOf(E elemrnt); //判断是否包含元素 public boolean contains(E element); //判断线性表是否为空 public boolean isEmpty(); //清空线性表 public void clear(); //按照比较器的内容进行排序 public void sort(Comparator<E> c); //获取子线性表[formIndex,toIndex) public List<E> subList(int fromIndex, int toIndex); }
2. 线性表的实现ArrayList
ArrayList就是线性结构顺序存储方式的具体实现,称为线性表
创建ArrayList类实现List接口
2.1定义相关成员属性
三个成员属性:data size DEFAULT_CAPACITY
/数组的容器 data.length 指的就是当前数组的容量
private E[] data;
//元素的个数 size == 0 线性表为空 size == data.length 线性表满了
//size 新元素默认尾部添加时要去的角标
private int size;
//默认容量
private static int DEFAULT_CAPACITY = 10;
//创建一个默认容量为10的线性表
2.2定义构造函数
data不能直接引用外部传入的数组arr否则外部对arr的修改会引起ArrayList内部的一些问题
//创建一个默认容量为10的线性表
public ArrayList(){
data = (E[]) new Object[DEFAULT_CAPACITY];
size = 0;
}
//创建一个指定容量的线性表
public ArrayList(int capacity){
if(capacity <=0){
throw new IllegalArgumentException("capacity must >0");
}
DEFAULT_CAPACITY=capacity;
data =(E[]) new Object[DEFAULT_CAPACITY];
size = 0;
}
//传入一个数组 将该数组封装成为一个线性表
public ArrayList(E[] arr){
if(