MyArrayList的实现
定义两个接口MyList和MyIterator。定义好集合和迭代器的规则(方法只实现增删改查及迭代器)
public interface MyList<E> extends Iterable<E> { boolean add(E e); void add(int index, E e); E remove(int index); boolean remove(Object obj); void clear(); boolean contains(Object obj); E get(int index); int index(Object obj); int lastIndexOf(Object obj); MyIterator<E> iterator(); MyIterator<E> iterator(int index); }
import java.util.Iterator; public interface MyIterator<E> extends Iterator<E> { boolean hasNext(); boolean hasPrevious(); E next(); E previous(); int nextIndex(); int prevIndex(); void add(E e); void remove(); void set(E e); }
对于ArrayList,要对其常量、属性、构造方法、API进行设计
常量:要确定底层数组的最大容量和默认容量
private static final int DEFAULT_CAPACITY = 10; private static final int MAX_CAPACITY = Ineger.MAX_VALUE - 8;
属性:底层是数组
private Object[] elements; private int size; private int modCount; //统计集合结构修改的次数,验证迭代器是否失效
构造方法
public MyArrayList() { elements = new Object[DEFAULT_CAPACITY]; } public MyArrayList(int initialCapacity) { if (initialCapacity <= 0 || initialCapacity > MAX_CAPACITY) throw new IllegalArgumentException("initialCapacity=" + initialCapacity); elements = new Object[initialCapacity]; }
API:
增: boolean add(E e) void add(int index, E e)
tips:
-
计算扩容长度时,可以使用移位运算符
-
在grow()扩容方法中,要记得将elements数