您的位置:首页 > 其它

源码实现ArrayList的常用方法

2016-07-29 12:32 337 查看
关于ArrayList,用起来非常的方便,对于一些常用的方法,如果能够自己实现 一下,深入到源码去实现一下它, 必定有深的认识。下面自己实现一个myArrayList,完成ArrayList的一些基本的方法,比如Add,get,set,remove的方法等等。

package myArrayList;

public class myArrayList {
//定义一个Object类的数组
private Object[] elementsData;
//容器中对象的个数
private  int size;
public int size(){
return size;
}
/*
*虽然ArrayList为动态的数组,因为其底层实现还是根据数组实现的,所以其还是有一个初始的大小,只是再add增加到大于DEFAULT_CAPACIT的时候,涉及到数组的
*扩容问题
*/
private static final int DEFAULT_CAPACITY = 10;
public myArrayList(){
this(DEFAULT_CAPACITY);
}

public myArrayList(int initialCapacity){
//
if(initialCapacity<0)
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
else
elementsData=new Object[initialCapacity];
}

//数组
public void Add(Object obj){
//数组扩容问题
if(size>=elementsData.length){
Object[] newArray=new Object[size*2+1];
System.arraycopy(elementsData, 0, newArray, 0, elementsData.length);
elementsData=newArray;
}
elementsData[size++]=obj;
}

//得到索引下标的对象
public Object get(int index){
rangeCheck(index);
return  elementsData[index];
}

//移除索引下标的对象
public void remove(int index){
rangeCheck(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementsData, index+1, elementsData, index, numMoved);
elementsData[--size] = null;
}

//直接移除给定的对象
public void remove(Object obj){
for(int i=0;i<elementsData.length;i++){
if(elementsData[i].equals(obj))
{
remove(i);
return ;
}
}
}

/*
* 遍历一下,当然这个遍历并没有按照源码的方式实现,
* 只是为了测试一个写的方法
*/
public void traverse(){
for(int i=0;i<size;i++){
System.out.println(elementsData[i]);
}
}

/*
* 把给定的对象放在具体的索引下标下
*/
public void set(int index,Object obj){
rangeCheck(index);
Object oldvalue=elementsData[index];
elementsData[index]=obj;
}

//检测索引越界的问题
private void rangeCheck(int index) {
if (index >= size||index<0)
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
myArrayList list=new myArrayList();
list.Add("aaa");
list.Add("bbb");
list.Add("ccc");
list.Add("ddd");
list.Add("aaa");
list.remove(2);
list.set(2, 123);
list.traverse();
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ArrayList 源码实现