数组手动实现ArrayList
程序员文章站
2022-06-09 16:57:57
...
public class ArrayListDemo {
private static final int DEFAULT_LENGTH = 10;
private Object[] datas;
private int size;
public ArrayListDemo() {
super();
this.datas = new Object[DEFAULT_LENGTH];
}
public int size(){
return size;
}
public void add(Object obj){
resizeLength(size+1);
datas[size++] = obj;
}
private void resizeLength(int minLength) {
if(minLength - datas.length>0){
datas = Arrays.copyOf(datas, 10);
}
}
public Object get(int index){
//校验是否越界
return datas[index];
}
/**
* arraycopy(Object src, int srcPos,
Object dest, int destPos, int length)
src:源数组; srcPos:源数组要复制的起始位置;
dest:目的数组; destPos:目的数组放置的起始位置;length:复制的长度。
* @param index
* @return
*/
public Object remove(int index){
//校验越界
Object oldValue = datas[index];
int moved = size - index - 1;//这个元素后面有多少元素
if (moved > 0)
System.arraycopy(datas, index+1, datas, index, moved);//把后面的元素统一往前移
datas[--size] = null;//把对象的引用去掉,对象回收
return oldValue;
}
public int indexOf(Object obj){
if(obj == null){
for(int i=0;i<size;i++){
if(datas[i]==null)
return i;
}
}else{
for(int i=0;i<size;i++){
if(datas[i].equals(obj))
return i;
}
}
return -1;
}
}
转载于:https://www.jianshu.com/p/d6c14467cb6e
上一篇: 手动实现数组方法
下一篇: 手动实现js原生订阅发布事件模型