目录
一、IList
java
package myArrayList;
/**
* Created with IntelliJ IDEA.
* Description:
* User: tangyuxiu
* Date: 2024-08-05
* Time: 8:45
*/
public interface IList<T> {
// 判断顺序表是否已满
boolean isFull();
// 新增元素,默认在数组最后新增
void add(T data);
// 在pos位置新增元素
void add(int pos, T data) throws PosIslegalException;
// 判定是否包含某个元素
boolean contains(T toFind);
// 查找某个元素对应的位置
int indexOf(T toFind);
// 获取 pos 位置的元素
T get(int pos) throws PosIslegalException;
// 给 pos 位置的元素设为 value
void set(int pos, T value) throws PosIslegalException;
//删除第一次出现的关键字key
void remove(T toRemove);
void removeTow(T toRemove);
// 获取顺序表长度
int size();
// 清空顺序表
void clear();
// 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的
void display();
}
二、MyArrayList
java
package myArrayList;
import java.awt.image.AreaAveragingScaleFilter;
import java.util.Arrays;
/**
* Created with IntelliJ IDEA.
* Description:
* User: tangyuxiu
* Date: 2024-08-05
* Time: 8:45
*/
//如果不把MyArrayList定义成泛型的,就传不了泛型标记了🙀
public class MyArrayList<T> implements IList<T> {
private Object[] elem;
private int usedSize;//顺序表中有效数据个数
public MyArrayList() {
this.elem = new Object[6];
}
@Override
public boolean isFull() {//判断顺序表是否已满
if (this.elem.length == this.usedSize) {
return true;
} else {
return false;
}
}
//扩容,没必要把返回值定义成T[],我们使用泛型限定了放入数组中的元素类型,并不是限定数组类型,Object[]也不能强转为其他类型的数组
private Object[] newCapacity() {
Object[] cur = Arrays.copyOf(this.elem, this.elem.length * 2);
return cur;
}
private boolean isLegal(int pos) {//add时是否合法
if (pos >= 0 && pos <= this.elem.length) {
return true;
} else {
return false;
}
}
private boolean isLegalTow(int pos) {//重置时是否合法
if (pos >= 0 && pos < this.elem.length) {
return true;
} else {
return false;
}
}
@Override
public void add(T data) {//新增元素,默认在数组最后新增
if (this.isFull()) {
this.elem = this.newCapacity();
}
this.elem[this.usedSize] = data;
this.usedSize++;
}
@Override
public void add(int pos, T data) throws PosIslegalException {//在pos位置新增元素
if (this.isFull()) {
this.elem = this.newCapacity();
}
if (!this.isLegal(pos)) {
throw new PosIslegalException("pos位置不合法!!!");
}
for (int i = this.usedSize; i > pos ; i--) {
this.elem[i] = this.elem[i - 1];
}
this.elem[pos] = data;
this.usedSize++;
}
@Override
public boolean contains(T toFind) { //判定是否包含某个元素,contains是包含的意思
for (int i = 0; i < this.usedSize; i++) {
if (this.elem[i].equals(toFind)) {
return true;
}
}
return false;
}
@Override
public int indexOf(T toFind) {//查找某个元素对应的位置
for (int i = 0; i < this.usedSize; i++) {
if (this.elem[i].equals(toFind)) {
return i;
}
}
return -1;
}
@Override
public T get(int pos) throws PosIslegalException {//获取 pos 位置的元素
if (!this.isLegal(pos)) {
throw new PosIslegalException("pos位置不合法!!!");
}
return (T)this.elem[pos];
}
@Override
public void set(int pos, T value) throws PosIslegalException {//给pos位置的元素设为 value
if (!this.isLegalTow(pos)) {
throw new PosIslegalException("pos位置不合法!!!");
}
this.elem[pos] = value;
}
@Override
public void remove(T toRemove) {//删除第一次出现的关键字key
for (int i = 0; i < this.usedSize; i++) {
if (this.elem[i].equals(toRemove)) {
int j = i;
for (; j < this.usedSize - 1; j++) {
this.elem[j] = this.elem[j + 1];
}
this.elem[j] = null;
this.usedSize--;
break;
}
}
}
@Override
public void removeTow(T toRemove) {//删除顺序表中所有的key,等待优化🧐!
while (true) {
int flag = 1;
for (int i = 0; i < this.usedSize; i++) {
if (this.elem[i].equals(toRemove)) {
flag = 0;
int j = i;
for (; j < this.usedSize - 1; j++) {
this.elem[j] = this.elem[j + 1];
}
this.elem[j] = null;
this.usedSize--;
break;
}
}
if (flag == 1) {
break;
}
}
}
@Override
public int size() {//获取顺序表长度
return this.usedSize;
}
@Override
public void clear() {//清空顺序表
for (int i = 0; i < this.usedSize; i++) {
this.elem[i] = null;
}
this.usedSize = 0;//别忘了🙀
this.elem = null;
}
// 打印顺序表
// 注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的
@Override
public void display() {
System.out.println(Arrays.toString(this.elem));
}
}
三、PoslslegalException
java
package myArrayList;
/**
* Created with IntelliJ IDEA.
* Description:
* User: tangyuxiu
* Date: 2024-08-05
* Time: 9:31
*/
public class PosIslegalException extends Exception {
public PosIslegalException() {
super();
}
public PosIslegalException(String str) {
super(str);
}
}
四、Test
java
package myArrayList;
/**
* Created with IntelliJ IDEA.
* Description:
* User: tangyuxiu
* Date: 2024-08-05
* Time: 8:45
*/
public class Test {
public static void main(String[] args) throws PosIslegalException {
IList<String> iList = new MyArrayList<>();//这种写法父类只能访问父类存在的方法
//MyArrayList<String> myArrayList = new MyArrayList<>();
iList.add("abc");
iList.add("def");
iList.add("def");
iList.add("ghi");
iList.add("def");
iList.add("ghi");
// iList.add("ghi");
// iList.add("ghi");
// iList.add("ghi");
// iList.add("ghi");
// iList.display();
// iList.add(0,"kkk");
// iList.add(2,"eee");
// iList.add(10,"eee");
// iList.display();
// System.out.println(iList.contains("kkk"));
// System.out.println(iList.contains("def"));
// System.out.println(iList.indexOf("kkk"));
// System.out.println(iList.indexOf("def"));//1
// System.out.println(iList.get(1));
// System.out.println(iList.get(100));
// iList.set(1,"hhhh");
// iList.set(100,"hhhh");
// iList.display();
// iList.display();
// iList.remove("def");
// iList.display();\
// iList.display();
// iList.removeTow("def");
// iList.display();
// System.out.println(iList.size());
iList.clear();
}
}