无论在工作中还是在学习中,我们一定要养成多看源码的好习惯。
源码是我们的根基,想要在技术上达到更高的高度,必须要打好根基。
希望我们以后的日子里养成这样的习惯。
下面是我结合ArrayList源码及它底层实现是数组的特点,写的一个自己实现的MyArrayList.
package ch.chenhui.www;
public class MyArraylist {//定义数组
private Object[] elementData;
//定义长度
private int size;
//size方法
public int size(){
return size;
}
//isEmpty方法
public boolean isEmpty(){
return size==0;
}
//初始长度为10
public MyArraylist() {
this(10);
}
//带参构造并判断是否小于0
public MyArraylist(int init ) {
if(init<0){
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
elementData=new Object[init];
}
//实现add方法
public void add(Object o){
//需要扩容
if(size+1>elementData.length){
//创建新数组
Object[] arr=new Object[size*2+1];
//拷贝数据 用复制方法
System.arraycopy(elementData, 0, arr, 0, elementData.length);
//用for循环也可以进行拷贝
//for(int i=0;i<elementData.length;i++){
//arr[i]=elementData[i];
//}
elementData=arr;
}
elementData[size]=o;
size++;
}
//实现get方法
public Object get(int index){
if(index<0||index>=size){
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return elementData[index];
}
}