package cn.mark.work0219; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 自定义实现ArrayList的数据结构 * @author hilih * */ public class MyArrayList implements MyList{ private int size = 0; private Object[] elementData; public MyArrayList(){ //默认容量初始化为10 this(10); } /** * 初始即指定大小的构造方法 * @param size 集合容量 */ public MyArrayList(int size){ if ( size < 0 ){ System.out.println("不合法的容量输入"); return; } elementData = new Object[size]; } /** * 集合增容 * @param minSize */ private void ensureSize(int minSize){ int oldSize = elementData.length; if(minSize > oldSize){ int newSize = 3 * oldSize / 2 + 1; if(minSize > newSize){ newSize = minSize; } elementData = Arrays.copyOf(elementData, newSize); } } /** * 下标范围判断 * @param index */ private boolean rangeCheck(int index){ if ( index >= size || index < 0 ){ System.out.println("索引不合法!"); return false; } return true; } @Override public boolean add(Object o) { ensureSize(size+1); elementData[size++] = o; return true; } @Override public boolean add(int index, Object o) { if (!rangeCheck(index)){ return false; } ensureSize(size + 1); System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = o; size++; return true; } @Override public Object get(int index) { if (!rangeCheck(index)){ return null; } Object o = elementData[index]; return o; } @Override public Object remove(int index) { if (!rangeCheck(index)){ return null; } Object oldValue = elementData[index]; int numMoved = size - index - 1; if( numMoved > 0 ){ System.arraycopy(elementData, index + 1, elementData, index, numMoved); } return oldValue; } @Override public int size() { return size; } @Override public String toString() { StringBuilder s = new StringBuilder(); s.append("["); for (int i = 0; i < size; i++){ Object o = elementData[i]; s.append(o.toString()); if( i < size-1 ){ s.append(","); } } s.append("]"); return s.toString(); } /** * 判断当前集合是否为空 * @return */ public boolean isEmpty(){ return size == 0; } public static void main(String[] args) { MyList list = new MyArrayList(); list.add("a"); list.add("b"); list.add("c"); list.add(2,"d"); Object o = list.get(5); System.out.println(o); System.out.println(list.size()); System.out.println(list); } }