ArrayList概念及手写代码

来源:互联网 发布:淘宝新品怎么做爆款 编辑:程序博客网 时间:2024/05/16 14:47

一、ArrayList的底层是Object类的数组,默认长度是10,超过10后,长度变为原长度的1.5倍。

二、可以简单的认为是一个动态数组;实际上ArrayList就是用数组实现的,长度不够时,调用Arrays.copyOf方法,拷        贝当前数组到一个新的长度更大的数组。

三、特点:随机访问速度快,插入和移除性能较差(数组的特点);

                  支持null元素;

                  有顺序;

                  元素可以重复;

                  线程不安全。

四、手写ArrayList

public class MyArrayList {


private Object[] elementData;  //实质:Object数组


private int size;  //长度

public MyArrayList(){  //默认初始长度是10
this(10);
}

public MyArrayList(int initalCapacity){  //赋初值时,判断初值是否大于0
if(initalCapacity<0){
try{
throw new Exception();  //不是就抛异常
}catch(Exception e){
e.printStackTrace();
}
}
elementData = new Object[initalCapacity];  //是就给Object;
}

public int size(){  //定义判断长度方法size()
return size;
}

public boolean isEmpty(){  //判断是否非空
return size == 0;
}

public void rangeCheck(int index){  //数组越界判断,是就抛异常
if(index<0 || index>=size){
try{
throw new Exception();
}catch(Exception e){
e.printStackTrace();
}
}
}

public void ensureCapacity() {  //扩展长度
if(size>=elementData.length) {
Object[] temp = new Object[elementData.length*3/2];
System.arraycopy(elementData, 0, temp, 0, size);
elementData = temp;
}
}


/*

*增删改查

*/
public void add(Object obj) {
ensureCapacity();
elementData[size++] = obj;
}

public void add(int index, Object obj) {
rangeCheck(index);
ensureCapacity();
System.arraycopy(elementData, index, elementData, index+1, size-index);
elementData[index] = obj;
size++;
}

public Object get(int index) {
rangeCheck(index);
return elementData[index];
}

public Object set(int index, Object obj) {
rangeCheck(index);
Object oldValue = elementData[index];
elementData[index] = obj;
return oldValue;
}

public void remove(int index) {
rangeCheck(index);
ensureCapacity();
System.arraycopy(elementData, index+1, elementData, index, size-index-1);
size--;
}

public static void main(String[] args) {
MyArrayList list = new MyArrayList(2);
list.add("a");
list.add("b");
System.out.println(list.size());
list.add(1, "c");
System.out.println(list.get(1));
list.remove(1);
System.out.println(list.get(1));
}


}

五、实现与继承关系:

原创粉丝点击