Java自定义数组列表
在Java中可以利用自定义接口,实现类似于ArrayList的自定义功能。
首先 我们创建一个接口,在里面定义我们想要实现的功能,如一个数组列表,我们想实现添加、删除、获取长度、修改等。
public interface MyList<E> {
void add(E e);
int getSize();
E get(int index);
void det(int index);
void change(int index,E e);
}
这样我们就自定义出了一个接口,这里还用了泛型,方便对所有的数据类型,这个数组列表都能使用,泛型的介绍本文就不过多的解释。
接着,就可以新建一个类来接这个接口并重新编写构造方法来实现这个数组列表应该有的功能
public class ArList<E> implements MyList<E> {
}
首先是获取数据的功能,因为这里是采用了泛型,所以我们不知道输入的数据是什么类型的,所以我用了Object来存储数据
Object[] data;
public E get(int index) {
return (E) data[index];
}
接着是添加与删除,添加的思路是构造一个新的数组,他的大小等于原数组大小+1,然后依次将原数组的数据赋值到新数组,最后把新数组传给原数组data,最后把要添加的数据添加到多出来的这一位的大小里,就相当于数组变大了(参考ArrayList,如果数据过大,可以直接扩大1.5倍左右,减少运算时间,提高效率)。
public void add(E e) {
Object[] newdata = new Object[Size + 1];
for (int i = 0; i < Size; i++) {
newdata[i] = data[i];
}
data = newdata;
data[Size++] = e;
}
public void det(int index) {
Object[] newdata = new Object[Size - 1];
int j = 0;
for (int i = 0; i < index; i++) {
newdata[j] = data[i];
j++;
}
for (int i = index + 1; i < Size; i++) {
newdata[j] = data[i];
j++;
}
data = newdata;
Size--;
}
最后是其他功能
public void change(int index, E e) {
data[index] = e;
}
public int getSize() {
return Size;
}
测试
public static void main(String[] args) {
ArList<String> al = new ArList<>();
al.add("1");
al.add("2");
al.add("3");
al.add("4");
al.add("5");
for (int i = 0; i < al.getSize(); i++) {
System.out.println(al.get(i));
}
al.det(2);
al.change(3, "7");
for (int i = 0; i < al.getSize(); i++) {
System.out.println(al.get(i));
}