1. 简介
数组是最基本的数据结构,属于线性表。存储一个固定大小的相同类型元素的顺序集合。
最大的优势就是支持随机访问,即知道索引就可以访问。但是数组的长度一旦声明就是固定死的。
接下来来使用数组二次封装实现栈,队列。
2. 二次封装数组
二次封装来实现数组的增删改查。
创建一个泛型类,其中有两个成员属性
public class Array<E> {
// 泛型数组
private E[] data;
// 目前已存储的元素个数
private int size;
/**
* 有参构造函数
* @param capacity 容量
*/
public Array(int capacity){
data = (E[])new Object[capacity];
size = 0;
}
/**
* 无参构造函数,默认数据容量为10
*/
public Array(){
this(10);
}
}
2.1 添加操作
/**
* 在数组末尾添加元素
* @param e
*/
public void addLast(E e){
if(size == data.length){
throw new IllegalArgumentException("AddLast failed. Array is full.");
}
data[size] = e;
size++;
}
在指定位置插入值:
/**
* 在索引位置插入值
* @param index
* @param e
*/
public void add(int index, E e){
if(index < 0 || index > size || size == data.length){
throw new IllegalArgumentException("Add failed. Require index < 0 || index > size");
}
// 把要插入到的位置的元素全部向后移动
// 并且只能从最后一个元素开始后移,不然就会丢失数据
for(int i = size - 1; i >= index; i--){
data[i + 1] = data[i];
}
// 最后再插入
data[index] = e;
size++;
}
此时也可以修改addLast:
/**
* 在数组末尾添加元素
* @param e
*/
public void addLast(E e){
add(size, e