1. 程式人生 > 其它 >簡單實現ArrayList類

簡單實現ArrayList類

/**
 * @Author: xyc
 * @ClassName: MyArrayList
 * @Date: 2022/3/19 9:44 下午
 **/
public class MyArrayList<T> implements Iterable<T> {
    /**
     * 預設大小
     */
    private static final int DEFAULT_CAPACITY = 10;

    /**
     * 當前大小
     */
    private int theSize;
    /**
     * 當前陣列
     */
    private
T[] theItems; public MyArrayList() { doClear(); } public void clear() { doClear(); } private void doClear() { theSize = 0; ensureCapacity(DEFAULT_CAPACITY); } public int size() { return theSize; } public boolean isEmpty() {
return size() == 0; } public void trimToSize() { ensureCapacity(size()); } public T get(int idx) { if (idx < 0 || idx >= size()) { throw new ArrayIndexOutOfBoundsException(); } return theItems[idx]; } public T set(int idx, T newVal) {
if (idx < 0 || idx >= size()) { throw new ArrayIndexOutOfBoundsException(); } T old = theItems[idx]; theItems[idx] = newVal; return old; } /** * 擴容方法 * * @param newCapacity 新的容量 */ public void ensureCapacity(int newCapacity) { if (newCapacity < theSize) { return; } T[] old = theItems; theItems = (T[]) new Object[newCapacity]; for (int i = 0; i < size(); i++) { theItems[i] = old[i]; } } public boolean add(T x) { add(size(), x); return true; } public void add(int idx, T x) { if (theItems.length == size()) { ensureCapacity(size() * 2 + 1); } for (int i = theSize; i > idx; i--) { theItems[i] = theItems[i - 1]; } theItems[idx] = x; theSize++; } public T remove(int idx) { T removedItem = theItems[idx]; for (int i = idx; i < size() - 1; i++) { theItems[i] = theItems[i + 1]; } theSize--; return removedItem; } @Override public Iterator<T> iterator() { return null; } /** * 內部類,提供可迭代功能 */ private class ArrayListIterator implements Iterator<T> { private int current = 0; @Override public boolean hasNext() { return current < size(); } @Override public T next() { if (!hasNext()) { throw new NoSuchElementException(); } return theItems[current++]; } @Override public void remove() { MyArrayList.this.remove(--current); } } }