public class ArrayDemo {
// 存储数据的数组
private Object[] array;
// 数组中存储元素的个数
private int size;
// 数组的容量
private int capacity;
// 无参构造器,数组默认初始容量为10
public ArrayDemo() {
this(10);
}
// 有参构造器
public ArrayDemo(int capacity) {
array = new Object[capacity];
this.capacity = capacity;
}
/**
* 在数组后面添加元素
*
* @param data
* @return
*/
public boolean add(Object data) {
// 判断是否要扩容
ensureCapacity(size + 1);
array[size++] = data;
return true;
}
/**
* 在数组指定位置添加元素
*
* @param index
* @param data
* @return
*/
public boolean add(int index, Object data) {
// 判断是否要扩容
ensureCapacity(size + 1);
// 元素移动
System.arraycopy(array, index, array, index + 1, size - index);
array[index] = data;
size++;
return true;
}
/**
* 扩容方法
*
* @param needCapacity
*/
private void ensureCapacity(int needCapacity) {
// 如果元素的个数大于数组的容量时,需要扩容操作
if (needCapacity > capacity) {
capacity = capacity + (capacity >> 1);
Object[] newArray = new Object[capacity];
// 数组拷贝
System.arraycopy(array, 0, newArray, 0, array.length);
array = newArray;
}
}
/**
* 重写toString方法
*/
public String toString() {
StringBuilder bulider = new StringBuilder();
if (size == 0) {
bulider.append("[]");
} else {
bulider.append("[");
for (int i = 0; i < size; i++) {
bulider.append(array[i] + ",");
}
bulider.setCharAt(bulider.length() - 1, ']');
}
return bulider.toString();
}
/**
* 删除数组后面的元素
*
* @return
*/
public Object remove() {
if (size > 0) {
return array[--size];
} else {
return null;
}
}
/**
* 删除数组指定位置的元素
*
* @param index
* @return
*/
public Object remove(int index) {
// 判断下标是否合法
boolean flag = checkRange(index);
if (flag) {
// 拿到这个元素
Object res = array[index];
// 元素移动
System.arraycopy(array, index + 1, array, index, size - index - 1);
size--;
// 返回删除的元素
return res;
}
return null;
}
/**
* 判断下标是否合法
*
* @param index
* @return
*/
private boolean checkRange(int index) {
return (index >= 0 && index <= size - 1);
}
/**
* 修改指定位置的元素
*
* @param index
* @param data
* @return
*/
public boolean set(int index, Object data) {
// 判断下标是否合法
boolean flag = checkRange(index);
if (flag) {
array[index] = data;
return true;
}
return false;
}
/**
* 获取指定位置上的元素
*
* @param index
* @return
*/
public Object get(int index) {
// 判断下标是否合法
boolean flag = checkRange(index);
if (flag) {
return array[index];
}
return null;
}
/**
* 获取数组中元素的个数
*
* @return
*/
public int size() {
return size;
}
/**
*
* @return
*/
public boolean isEmpty() {
return size == 0;
}
public static void main(String[] args) {
ArrayDemo arr1 = new ArrayDemo();
arr1.add("111");
arr1.add(2);
arr1.add(2, 222);
arr1.add('a');
arr1.remove(1);
System.out.println("arr1 --> size:" + arr1.size + "\tcapacity:" + arr1.capacity);
System.out.println(arr1);
arr1.set(0, 'a');
System.out.println(arr1.get(0));
ArrayDemo arr2 = new ArrayDemo(5);
System.out.println("arr2 --> size:" + arr2.size + "\tcapacity:" + arr2.capacity);
System.out.println(arr2);
System.out.println(arr2.isEmpty());
}
}