package com.test.collection;/** * 自定义ArrayList容器 * * 1.实现原理:底层封装数组 * * 2.查询 * LinkList 相较 ArrayList 查询效率低: * 由于LinkList底层存放元素的不是数组,不能直接通过索引进行获取,需要从头或者从尾逐一遍历索引节点对象。 * ArrayList直接通过索引获取即可。 * * 3.删除、插入 * linkList 相较ArrayList 插入、删除的效率高 * LinkList 直接打断前后的链接,链接到新对象即可; * 而ArrayList插入之后需要对后面的元素 进行整体移位 * */public class MyArrayList { private int size; private Object[] elementData; 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; } public Object get(int index){ rangeCheck(index); return elementData[index]; } //下标越界检查 private 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[] newArray=new Object[size*2+1]; System.arraycopy(elementData, 0, newArray, 0, elementData.length); elementData =newArray; } } public int size(){ return size; } /** * @param args */ public static void main(String[] args) { MyArrayList list=new MyArrayList(3); list.add("111"); list.add("222"); list.add("333"); list.add("444"); System.out.println(list.size); }}