实现ArrayList

来源:互联网 发布:ubuntu pyqt4下载 编辑:程序博客网 时间:2024/06/05 00:34

ArrayList继承并实现了List,其源码实现也就是基于对数组的操作

package 学习;import java.util.ArrayList;class MyArrayList{private Object[] elementData;private int size;//构造器public MyArrayList(){this(10); //默认数组大小}public MyArrayList(int initialCapacity){if (initialCapacity < 0){try {throw new Exception();} catch (Exception e) {e.printStackTrace();}}elementData = new Object[initialCapacity];}//添加元素public void add(Object obj){ensureCapacity();elementData[size] = obj;size++;}public void add(int index, Object obj){rangeCheck(index);ensureCapacity();System.arraycopy(elementData, index, elementData, index+1, size-index);size++;}public int size(){return size;}//获取指定索引public Object get(int index){return elementData[index];}public void remove(int index){rangeCheck(index);//删除指定位置对象int num = size-index-1;if (num > 0){ //如果是最后一个就不用拷贝,把原来iNdex位置覆盖掉在数组最后设null;System.arraycopy(elementData, index+1, elementData, index, num);}elementData[size--] = null;}public void remove(Object obj){//移除这个对象for (int i=0; i<size; i++){if (get(i).equals(obj)){ //找到相同的对象remove(i);}} }//设置指定索引值,返回值是原来的值public Object set(int index, Object obj){rangeCheck(index);Object oldValue = elementData[index];elementData[index] = obj;//设置新的值return oldValue;}private void rangeCheck(int index){if (index<0 || index>=size){try {throw new Exception();} catch (Exception e) {System.out.println("越界");}}}private void ensureCapacity(){//数组扩容if(size == elementData.length){ Object[] newArrayList = new Object[size*2]; System.arraycopy(elementData, 0, newArrayList, 0, newArrayList.length); elementData = newArrayList;}}}public class Main{public static void main(String[] args) {MyArrayList arr = new MyArrayList();arr.add(123);arr.add(222);arr.add(333);arr.add(444);arr.remove(0);System.out.println(arr.size());arr.set(2, "替换掉");for (int i=0; i<arr.size(); i++){System.out.println(arr.get(i));}}}