MyArrayList
ArrayList自定义实现
import java.util.Arrays;
public class MyArrayList<E> {
// 增 删 改 查
// 定义数组
private E[] data;
// 数组大小
private int size;
// 抑制编译器警告
@SuppressWarnings("unchecked")
// 构造一个有参参数
public MyArrayList(int capacity) {
/*
* // 判断输入的是否有值 if (capacity <= 0) { // 小于0或大于0将本身的值赋给数组的长度 data = new
* int[this.capacity]; } else { // 将输入的值作为数组的长度 data = new int[capacity]; }
*/
// 判断输入的值是不是0或0以下
if (capacity <= 0) {
// 小于等于0赋值长度为5
data = (E[]) new Object[5];
} else {
// 将赋值的数给予data为长度
data = (E[]) new Object[capacity];
}
// 设置数为0
this.size = 0;
}
// 构造一个无参参数
public MyArrayList() {
// 默认长度为10
this(10);
}
// 增加数
public void insert(int index, E e) {
// 调取抛出异常
castAbnormal(index);
// 将所有的值向后移一位
for (int i = size - 1; i >= index; i--) {
// data[i]的值给予data[i + 1]
data[i + 1] = data[i];
}
// 将加入的值赋给data[index]
data[index] = e;
// 数的长度加1
size++;
// 判断数的个数是否与数组长度相同
if (size == data.length) {
// 扩容
resize();
}
}
// 在第一个位置增加
public void addFirst(E e) {
// 调用增加从0开始
insert(0, e);
}
// 在最后增加
public void addLast(E e) {
// 调用增加从size开始
insert(size, e);
}
// 删除
public void remove(int index) {
// 调取抛出异常
castAbnormal(index);
// 从索引开始计算增加
for (int i = index; i <= size; i++) {
// 将后面一个数赋给前面一个数
data[i] = data[i + 1];
}
// 数的长度减一
size--;
// 如果数的长度小于数组长度的一半-1
if (size == data.length / 2 - 1) {
// 进行缩容
delResize();
}
}
// 删除第一个数
public void removeFirst() {
// 赋值下标0
remove(0);
}
// 删除最后一个
public void removeLast() {
// 赋值下标最大的数
remove(size);
}
// 修改
public void set(int index, E e) {
// 调取抛出异常
castAbnormal(index);
// 将索引的值替换为e
data[index] = e;
}
// 查询
public E get(int index) {
// 将查询的值赋给price
E price = data[index];
// 将price作为返回值进行返回
return price;
}
// 获取数的多少
public int setSize() {
// 返回数的长度
return size;
}
// 获取数组长度
public int setCapacity() {
// 返回数组的长度
return data.length;
}
// 判断是空
public boolean isEmpty() {
// 返回数长度等于0的一个判断
return size == 0;
}
// 包含
public boolean contains(E e) {
// 循环所有的数
for (int i = 0; i < size; i++) {
// 判断数的值与查找的值是否相等
if (data[i] == e) {
// 找到返回true
return true;
}
}
// 没有找到返回false
return false;
}
// 角标索引
public int getIndex(E e) {
// 循环所有的数
for (int i = 0; i < size; i++) {
// 判断数的值与查找的值是否相等
if (data[i] == e) {
// 找到返回索引
return i;
}
}
// 没有找到返回 -1
return -1;
}
// 抛出异常
private void castAbnormal(int index) {
// 判断输入的值在不在范围
if (index < 0 || index > size) {
// 不在范围报异常
throw new IllegalArgumentException("数据异常");
}
}
// 扩容
public void resize() {
// 抑制编译器警告
@SuppressWarnings("unchecked")
// 建一个新的数组newData,数组长度是data数组长度发的2倍
E[] newData = (E[]) new Object[2 * data.length];
// 循环data数组的长度
for (int i = 0; i < data.length; i++) {
// 将数组data中的值赋给newData
newData[i] = data[i];
}
// newDatad赋予data
data = newData;
}
// 消容
public void delResize() {
// 抑制编译器警告
@SuppressWarnings("unchecked")
// 建一个新的数组newData,数组长度是data数组长度发的二分之一倍
E[] newData = (E[]) new Object[data.length / 2];
// 循环newData数组的长度
for (int i = 0; i < newData.length; i++) {
// 将数组data中的值赋给newData
newData[i] = data[i];
}
// newDatad赋予data
data = newData;
}
@Override
public String toString() {
return "MyArrayList [data=" + Arrays.toString(data) + "]";
}
}