数组这个数据结构对我们来说都不陌生,所谓数组就是内存中一段连续的存储空间,可以用来存放同一种数据类型。数组可以通过索引快速进行查找,根据索引查找的时间复杂度是O(1);但是进行删除某一项时,往往要伴随着大量数据的移动操作,因此时间复杂度是O(n),但是在删除尾部元素时,就不用移动数据,时间复杂度为0(1)。由此可见,数组比较适合做查询。
这节将封装一个自己的数组,并且实现了在空间不够时进行自动的扩容,在空间过大时进行自动缩容。 为了适 用于各种数据类型,因此实现方式采用了泛型。
废话不多说,直接上代码:
public class Array<E> {
//存储数据
private E[] data;
//当前数据中的元素个数
private int size;
/**
* 默认的初始容量为10
*/
public Array() {
this(10);
}
/**
* 用户指定初始容量
* @param capacity
*/
public Array(int capacity) {
data = (E[]) new Object[capacity];
size = 0;
}
public int getSize() {
return size;
}
public int getCapacity() {
return data.length;
}
public boolean isEmpty() {
return size == 0;
}
public boolean isFull() {
return size == data.length;
}
//向数组的最后添加元素
public void addLast(E e) {
add(size, e);
}
//向数组最开始的位置添加元素
public void addFirst(E e) {
add(0, e);
}
//向指定位置插入元素
public void add(int index, E e) {
if(index < 0 || index > size) {//下标合法性判断
throw new IllegalArgumentException("index is illegal!");
}
if(isFull()) {
//扩容
resize(2 * data.length);
}
for(int i = size-1; i >= index; i--) {