/**
* 手写ArrayList
*/
public class MyArrayList{
private Object[] value = null;
private int size = 0;
MyArrayList() {
value = new Object[10];
}
public boolean add(Object obj){
if(size == value.length)
expansion();
value[size++]=obj;
return true;
}
public Object get(int index){
return value[index];
}
public void remove(Object obj){
Object[] obj2 = new Object[size];
int index = 0;
int id = 0;
for (int i = 0; i <= size; i++) {
if(!(value[i].toString().equals(obj.toString()))){
obj2[index] = value[i];
index ++;
}else{
id ++ ;
if(id == 1)
size --;
else{
obj2[index] = value[i];
index ++;
}
}
}
value = obj2;
}
@SuppressWarnings("null")
public void set(int index,Object obj){
Object[] newObj = new Object[size];;
for (int i = 0; i < size; i++) {
if(i == index)
newObj[i] = obj;
else
newObj[i] = value[i];
}
value = newObj;
}
public int size(){
return size;
}
private boolean expansion() {
Object[] temp = new Object[value.length + 5];
temp = value.clone();
/**
* 注意:clone只对一维数组起作用,而不能用于二维数组, 因为java没有二维数组的概念,而只有数组的数组,二维
* 数组存储的是几个一维数组的引用,而使用clone也只是 拷贝了这几个引用,说白了还是原来那几个一维数组对象。
* 如果想用于二维数组,那么就遍历其中的一维数组,挨个 拷贝一维数组到目标二维数组中的一维数组下。
*/
value = temp;
return true;
}
public void clear(){
size = 0;
value = null;
}
public static void main(String[] args) {
MyArrayList ma = new MyArrayList();
ma.add("hello");
ma.add("world");
ma.add("java");
System.out.println(ma.get(1));
System.out.println(ma.size());
ma.set(1, "new");
System.out.println(ma.get(1));
System.out.println(ma.size());
}
}
逻辑其实很简单,因为底层是数组,所以建一个数组,模拟ArrayList的CRUD就ok.不懂的可以给我留言。
如果你觉得我写的还可以,请关注我的公众号,为我加油喝彩