根据ArrayList<>提供的方法名,去实现一遍其内部逻辑
目前已实现方法如下:
package cjy.datastructure;
import java.util.Arrays;
/**
* 线性表常用操作 Title: MyArrayList.java
*
* 后面需改泛型以支持其他数据类型 都用Object
*
* @author CJY》10258
* @date 2019年7月9日
*/
public class MyArrayList {
/**
* 空数组
*/
private int[] elements;
public MyArrayList() {
elements = new int[0];
}
/**
* 在表尾添加元素
*
* @param e
*/
public void add(int e) {
int[] array = new int[elements.length + 1];
for (int i = 0; i < elements.length; i++) {
array[i] = elements[i];
}
array[elements.length] = e;
elements = array;
}
/**
* 在指定位置插入一段数据
*
* @param index
* @param list
*/
public void addAll(int index, MyArrayList list) {
if (index > elements.length - 1 || index < 0) {
throw new RuntimeException("数组下标越界");
}
int[] array = new int[elements.length + list.size()];
for (int i = 0; i < elements.length; i++) {
// 位置前面部分直接移,后面部分往后移一位
if (i < index) {
array[i] = elements[i];
} else {
array[i + list.size()] = elements[i];
}
}
for (int i = 0; i < list.size(); i++) {
array[index + i] = list.get(i);
}
elements = array;
}
/**
* 指定位置添加元素
*
* @param index
* @param element
*/
public void add(int index, int element) {
if (index > elements.length - 1 || index < 0) {
throw new RuntimeException("数组下标越界");
}
int[] array = new int[elements.length + 1];
for (int i = 0; i < elements.length; i++) {
// 位置前面部分直接移,后面部分往后移一位
if (i < index) {
array[i] = elements[i];
} else {
array[i + 1] = elements[i];
}
}
array[index] = element;
elements = array;
}
/**
* 删除指定位置元素
*
* @param index
*/
public void remove(int index) {
if (index > elements.length - 1 || index < 0) {
throw new RuntimeException("数组下标越界");
}
int[] array = new int[elements.length - 1];
for (int i = 0; i < array.length; i++) {
// 位置前面部分直接移,后面部分往前移一位
if (i < index) {
array[i] = elements[i];
} else {
array[i] = elements[i + 1];
}
}
elements = array;
}
/**
* 获取当前位置(下标)的元素
*
* @param index
* @return
*/
public int get(int index) {
if (index > elements.length - 1 || index < 0) {
throw new RuntimeException("数组下标越界");
}
return elements[index];
}
/**
* 输出表元素到控制台
*/
public void show() {
System.out.println(Arrays.toString(elements));
}
/**
* 线性表大小
*
* @return
*/
public int size() {
return elements.length;
}
/**
* 在指定位置更新元素
*
* @param index
* @param e
*/
public void set(int index, int e) {
if (index > elements.length - 1 || index < 0) {
throw new RuntimeException("数组下标越界");
}
elements[index] = e;
}
/**
* 没有元素则返回true
*
* @return true or false
*/
public Boolean isEmpty() {
return elements.length <= 0 ? true : false;
}
/**
* 截取部分列表从 fromIndex 到 toIndex 的前一个元素 如果这两位置相等则返回 null list
*
* @param fromIndex
* @param toIndex
* @return
*/
public MyArrayList subList(int fromIndex, int toIndex) {
if (fromIndex > toIndex) {
throw new IllegalArgumentException("fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")");
}
if (fromIndex > elements.length - 1 || fromIndex < 0 || toIndex > elements.length - 1 || toIndex < 0) {
throw new RuntimeException("数组下标越界");
}
MyArrayList list = new MyArrayList();
int[] array = new int[toIndex - fromIndex];
for (int i = 0; i < array.length; i++) {
list.add(elements[fromIndex + i]);
}
return list;
}
}