创建 MyArraryList 类
import java.util.Arrays;
/**
* Created with IntelliJ IDEA.
* Description:
* User: 飞逝恋
* Date: 2022-09-15
* Time: 14:49
*/
public class MyArraylist {
public int[] elem;
public int usedSize;
public static final int DEFAULT_CAPACITY = 5;
public MyArraylist() {
this.elem = new int[DEFAULT_CAPACITY];
}
/**
* 打印顺序表:
* 根据usedSize判断即可
* 只需要打印到usedSize 就可以了
*/
public void display() {
for (int i = 0; i < this.usedSize; i++) {
System.out.print(this.elem[i] + " ");
}
System.out.println();
}
// 新增元素,默认在数组最后新增
public void add(int data) {
// elem(克隆的数组, 克隆数组的长度)
// 返回值是一个copy数组
if (isFull()) {
elem = Arrays.copyOf(elem, 2 * elem.length);
}
// 扩容一般不会失败
// try {
// if (isFull()) {
// elem = Arrays.copyOf(elem, 2*elem.length);
// }
// }catch (NegativeArraySizeException e) {
// e.printStackTrace();
// }
elem[usedSize] = data;
usedSize++;
}
/**
* 判断当前的顺序表是不是满的!
* @return true:满 false代表空
*/
public boolean isFull() {
// 这里必须与elem.length 比较
// 不能与usedSize 比较, usedSize是固定值,
// 一旦扩容就不可用了
return usedSize == elem.length;
}
/**
* 检查add 函数中放入的元素位置是否合法
* 写成private 是因为checkPosInAdd 只为add 提供服务
* @param pos
* @return
*/
private void checkPosInAdd(int pos) {
if (pos < 0 || pos > usedSize) {
throw new PosIndexNotLegalException("pos位置不合法");
}
}
// 在 pos 位置新增元素
public void add(int pos, int data) {
try {
checkPosInAdd(pos);
for (int i = usedSize - 1; i >= pos; i--) {
this.elem[i+1] = this.elem[i];
}
this.elem[pos] = data;
usedSize++;
}catch (PosIndexNotLegalException e) {
e.printStackTrace();
}
}
// 判定是否包含某个元素
public boolean contains(int toFind) {
for (int i = 0; i < usedSize; i++) {
if (elem[i] == toFind) {
return true;
}
}
return false;
}
// 查找某个元素对应的位置
public int indexOf(int toFind) {
for (int i = 0; i < usedSize; i++) {
if (elem[i] == toFind) {
return i;
}
}
return -1;
}
/**
* 获取pos 位置的数据 检查合法性
* @param pos
*/
private void checkGetPos(int pos) {
if (pos < 0 || pos >= usedSize) {
throw new PosIndexNotLegalException("pos位置不合法");
}
}
// 获取 pos 位置的元素
public int get(int pos) {
checkGetPos(pos);
return elem[pos];
// int retVal = -1;
// try {
// checkGetPos(pos);
// retVal = elem[pos];
// }catch (PosIndexNotLegalException e) {
// e.printStackTrace();
// }
// return retVal;
}
private boolean isEmpty() {
return true;
}
// 给 pos 位置的元素设为【更新为】 value
public void set(int pos, int value) {
checkGetPos(pos);
elem[pos] = value;
}
/**
* 删除第一次出现的关键字key
* @param key
*/
public void remove(int key) {
int index = indexOf(key);
if (index == -1) {
System.out.println("没有你要删除的数字");
return;
}
for (int i = index; i < usedSize - 1; i++) {
elem[i] = elem[i+1];
}
// elem[i] = null;
usedSize--;
}
// 获取顺序表长度
public int size() {
return usedSize;
}
// 清空顺序表
public void clear() {
// for (int i = 0; i < usedSize; i++) {
// elem[i] = null;
// }
usedSize = 0;
}
}