本次练习旨在自己封装一个简单的ArrayList并不是重新复刻java中的ArrayList类,有不足之处还请各位多指点,用的都是比较基础的知识比较适合初学者。
/**
*
* @author Hercules
*
* @version 创建时间:2020年1月7日 下午5:11:30
*
* 类说明
*
*/
public class MyArrayLists<T> {
private Object[] datas; // 用来存放数据
private int size = 0; // 描述集合长度
public MyArrayLists(int size) {
if (size > 0) {
datas = new Object[size];
} else {
System.out.println("集合长度不能为负数");//我还没有学到异常部分,所以这里暂且如此处理
}
}
public MyArrayLists() {
this(10);
}
/*
* 添加注释到集合中去
*/
public void add(T t) {
//首先判断数组中是否已经装满
//如果已经装满则需要扩容数组
if(isFull()) {
grow();
}
datas[size++] = t; /*这里首先不要忘记扩容,其次这里只能用“size++”而不能用“++size”,
因为这里后++是先用变量的原始值进行赋值以及运算等,而后再+1,而前++则是先将变量+1,而后
在用+1后的值进行赋值和计算等*/
}
public void remove(int i) {
if(i>=0 && i<size) {
for(;i<size;i++) {
datas[i] = datas[i+1];
}
size--; //这里千万不要忘记最后数组的实际元素个数要减1;
}
}
//扩容
public void grow() {
Object [] newDatas = new Object[(int)(size*1.5)];
//将原来数组的数据装入新的数组
for(int i = 0;i<datas.length;i++) {
newDatas[i] = datas[i];
}
datas = newDatas;//将新的数组赋值给datas
}
//判断数组是否已经满了返回bool
public boolean isFull() {
return size >= datas.length;
}
//修改数据操作
public void set (int index,T t) {
if(index >= 0 && index < size ) {
datas[index] = t;
}
}
//获取数据操作
public T get (int index) {
if(index >= 0 && index <size) {
return (T) datas[index];
}
return null;
}
//获取集合长度
public int getLength() {
return size;
}
}
这就是一个自己封装的ArrayList类,可能有很多大神会觉得很low,不过既然是从基础开始,那就一点一点慢慢来。
我们来写一个测试类来看一下
/**
* @author Hercules
* @version 创建时间:2020年1月7日 下午6:33:23
* 测试类
*/
public class Test {
public static void main(String [] args) {
MyArrayLists<String> list = new MyArrayLists<String>();
list.add("a");
list.add("a1");
list.add("a2");
list.add("a3");
list.add("a4");
for(int i = 0; i < list.getLength();i++) {
System.out.println(list.get(i));
}
}
}
输出结果如下:
我们再在上述代码的for循环上面添加修改操作
//修改
list.set(2, "b");
可以看到第三个元素变为了b,没错java的数组下标是从0开始的。
而后们再编写代码将这个元素删除
可以看到这时候元素就只剩下了,这几个,剩下的功能就不一一演示了