public class MyList { private transient Object[] elementData; private int size; public MyList(int initialCapacity) { elementData = new Object[initialCapacity]; } public MyList() { this(10); } public void add(Object obj) { if (size == elementData.length) { Object[] newElementData = increase();// 扩容 elementData = newElementData; } elementData[size++] = obj; } // 扩容方法 public Object[] increase(){ Object[] newElementData = new Object[(size << 1)];// 扩容到2倍 System.arraycopy(elementData, 0, newElementData, 0, elementData.length); return newElementData; } // 删除 public boolean remove(int i) { // 删除不需要考虑库容问题,把后面的索引指向下一个对象,最后一个对象清空 if(i>=0 && i<size){ for (int j = i; j < size; j++) { elementData[j] = elementData[j + 1]; } size--; return Boolean.TRUE; } return Boolean.FALSE; } // 修改 public boolean modify(int i,Object obj) { if(i>=0 && i<size){ elementData[i]=obj; } return Boolean.FALSE; } // 获取某一个 public Object get(int i) { if (i <= size) { return elementData[i]; } return null; } public boolean isEmpty() { return size == 0; } public int size() { return size; } public static void main(String[] args) { MyList list = new MyList(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.add("6"); list.add("7"); list.add("8"); list.add("9"); list.add("10"); list.add("11"); list.add("12"); list.add("13"); list.remove(1); //list.modify(11, 88);// 最后一个改为88 for (int j = 0; j < list.size; j++) { System.out.println(list.get(j)); } System.out.println(list.get(1000)); } }
删除方法用了最原始的方式,并没有用System.arraycopy,其实是一样的