package array;
/**
* 自定义一个泛化动态数组工具类,类似与ArrayList集合类
* @author lilei
* @description
* @Date 2019/6/23 22:08
* @Version 1.0
**/
public class Array{
/**
* 数组中存放的数据
*/
private E[] data;
/**
* 数组的容量
*/
private int size;
/**
* 构造函数,传入数组的容量capacity构造Array
* @param capacity
*/
public Array(int capacity){
data = (E[])new Object[capacity];
size = 0;
}
public Array(){
this(10);
}
/**
* 在index索引的位置插入一个新元素e
* @param index
* @param e
*/
public void add(int index, E e){
// 当我在此用instanceof去拿参数中的e和我类中的泛型去比较的时候提示不合法
if(e instanceof E){
throw new IllegalArgumentException("参数不合法,传入的参数和数组中的类型不匹配.");
}
if (index < 0 || index > size) {
throw new IllegalArgumentException("添加数据失败,传入的index必须大于0并且小于数组中最大的index");
}
if (size == data.length) {
// 数组扩容为之前的2倍
resize(2 * data.length);
}
for (int i = size - 1; i >= index; i--){
data[i + 1] = data[i];
}
data[index] = e;
size++;
}
@Override
public String toString(){
StringBuilder res = new StringBuilder();
res.append(String.format("Array: size = %d , capacity = %d\n", size, data.length));
res.append('[');
for(int i = 0 ; i < size ; i ++){
res.append(data[i]);
if(i != size - 1){
res.append(", ");
}
}
res.append(']');
return res.toString();
}
/**
* 将数组空间的容量变成newCapacity大小
* @param newCapacity
*/
private void resize(int newCapacity){
E[] newData = (E[]) new Object[newCapacity];
for (int i = 0; i < data.length; i++){
newData[i] = data[i];
}
data = newData;
}
}