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);
}
}