利用数组实现ArrayList

来源:互联网 发布:手写笔 软件 编辑:程序博客网 时间:2024/06/05 22:40

/**
* 自己实现的ArrayList,加深对ArrayList的理解
*/
public class MyArrayList {
private Object[] elementData;
private int size;

// 返回大小public int size() {return size;}// 判断是否为空public boolean isEmpty() {return size == 0;}public MyArrayList() {this(10);}public MyArrayList(int initialCapacity) {if (initialCapacity < 0) {    try {    throw new Exception("初始化出错!");    } catch (Exception e) {    e.printStackTrace();    }}elementData = new Object[10];}public void add(Object o) {ensureCapacity();elementData[size] = o;size++;}// 根据下标获得元素public Object get(int index) {rangeCheck(index);return elementData[index];}// 根据下标删除元素public void remove(int index) {rangeCheck(index);int nubMoved = size-index-1;if(nubMoved>0){   //System.arraycopy(elementData, index+1, elementData, index, nubMoved);    for(int i=index;i<elementData.length-1;i++){    elementData[i]=elementData[i+1];    }}elementData[--size]=null;//垃圾回收}// 根据对象删除元素public void remove(Object o) {for(int i=0;i<elementData.length;i++){    if(elementData[i].equals(o)){//未重写equals方法,用的是==    remove(i);    }}}// 范围检查public void rangeCheck(int index) {if (index < 0 || index > size) {    try {    throw new Exception("范围出错");    } catch (Exception e) {    e.printStackTrace();    }}}private void ensureCapacity() {// 数组扩容和数据的拷贝if (size == elementData.length) {    Object[] newArray = new Object[size * 2 + 1];    System.arraycopy(elementData, 0, newArray, 0, elementData.length);    elementData = newArray;}}//指定位置添加元素,原位置元素移位public void add(int index,Object o){rangeCheck(index);ensureCapacity();System.arraycopy(elementData, index, elementData, index+1,elementData.length-index);elementData[index] = o;size++;}//指定位置添加元素,原位置元素返回public Object set(int index,Object o){rangeCheck(index);Object old = elementData[index];elementData[index] = o;return old;}public static void main(String[] args) {MyArrayList list = new MyArrayList();list.add("1");list.add("2");list.add("3");list.add("4");list.add("5");System.out.println(list.size);System.out.println(list.get(0));list.remove(0);System.out.println(list.size);}

}

0 0
原创粉丝点击