1、动态数组
Java内置数组的特点:
1、数组的长度一但确定则不可以更改。
2、数组只能存储同一类型的数据
3、数组中每个存储空间大小一致且地址连续。
4、数组提供角标的方式访问元素
动态数组的封装:
属性方面:
int size 数组的有效元素个数
int capacity 数组的最大容量data.length
E[] data 数据的存储容器
行为方面:
增()
删()
改()
查()
其他()
2、线性表的定义:
零个或多个数据元素的有限序列
线性表接口List的定义:
package 动态数组;
/*
定义线性表的接口List
List支持泛型E
该List线性表中所存储的具体数据类型由外界决定
*/
public interface List<E> extends Iterable<E>{
//获取线性表中元素的有效个数
int getSize();
//判断线性表是否为空表
boolean isEmpty();
//在线性表指定的index角标处插入元素e
void add(int index,E e);
//在线性表的表头处插入元素e
void addFirst(E e);
//在线性表的表位处插入元素e
void addLast(E e);
//获取线性表中指定角标index处的元素
E get(int index);
//获取表头元素
E getFirst();
//获取表尾元素
E getLast();
//修改线性表中指定角标index处的元素为新元素e
void set(int index,E e);
//判断线性表中是否包含元素e
boolean contains(E e);
//查找元素e的角标(从左到又默认第一个出现的元素角标)
int find(E e);
//删除并返回线性表中指定角标index处的元素
E remove(int index);
//删除并返回表头元素
E removeFirst();
//删除并返回表尾元素
E removeLast();
//删除指定元素e
void removeElement(E e);
//清空线性表
void clear();
}
线性表的顺序存储结构ArrayList的定义:
代码实现:
import java.util.Iterator;
/*
创建线性表的顺序存储结构实现类ArrayList
*/
public class ArrayList<E> implements List<E>{
//创建E类型的一维数组
private E[] data;
//维护元素的个数
private int size;
//默认最大容量为10
private static int DEAFULT_CAOACITY=10;
//创建一个默认大小的顺序表
public ArrayList(){
//data =(E[]) (new Objects[DEAFULT_CAOACITY]);
//调用下面传参为一个参数的构造函数
this(DEAFULT_CAOACITY);
}
//创建一个容量由用户指定的顺序表
public ArrayList(int capacity){
if(capacity<=0){
//运行异常,创建异常对象,然后进行抛出
throw new IllegalArgumentException("容量必须>0"+capacity);
}
//对一维数组data进行初始化,类型先给Object再强转为E泛型
data=(E[])(new Object[capacity]);
//将有效元素个数初始赋值为0
size