一、动态数组的特点
基本数组的特点: 保存的单个相同类型的元素,一旦声明一个原始数组,无论采用哪种实例化方式,最终数组一旦定义,长度固定!
由于原始数组存在的定长问题,因此,需要将原始数组做扩充,将原始数组封装到自定义的类中,让阿提具备可扩展的能力----对于使用者来说,用户无须关心数组的长度问题,提供给用户的数组是一个动态数组,用户只需要使用提供的数组进行更删改查即可,无须关心数组的越界问题~~~
本质: 将原始的数组封装到类中,对用户淡化数组长度的概念,当数组长度不够时,类的内部自己进行扩容操作,对用户透明~~
动态数组 = 基本数组封装到类中 + 对外提供一系列的方便进行增删改查的方法
线性表(List)是线性结构的一种典型实现,它又可以分为:顺序表(SeqList)和链表(LinkList)二大类.
二、设计一个动态数组
1、先写一个接口,用来方便修改具体的子类。
// 首先定义一个顺序表接口,可以非常方便低成本的修改具体的子类!
public interface SeqList {
// element--元素 向线性表中增加一个元素,默认在尾部。
void add(int element);
// 在索引为 index 的位置插入一个元素。
void add(int index,int element);
// 查询线性表中是否包含指定元素 element。
boolean contains(int element);
// 返回索引处为 index位置的元素值。
int get(int index);
// 修改索引处为 index的值,返回修改前的值。
int set(int index,int newElement);
// 删除索引为 index处的元素,返回删除之前的元素值。
int removeIndex(int index);
// 删除第一个值为 element的元素。
void removeFirstElement(int element);
// 删除线性表中所有值为 element的值。
void removeAllElement(int element);
}
2、定义一个类继承接口(同时需要覆写接口中的所有抽象方法!)
public class MyArrayList implements SeqList {
// 实际存储元素的数组! 对用户是不可见的!
private int[] array;
// 实际的元素个数。
private int size;
// 数组的默认的初始化长度。
private static final int default_num = 10;
// 无参构造,当用户不知道具体的数组元素个数时,默认为自定义的 default_num = 10;
public MyArrayList() {
this(default_num);
}
// 有参构造,当用户知道具体的元素个数时,该数组长度 = 用户自定义的 number;
public MyArrayList(int number) {
this.array = new int[number];
}
@Override
public void add(int element) {
}
@Override
public void add(int index, int element) {
}
@Override
public boolean