ArrayList 回顾

ArrayList特性

  • 可以随机访问,按照索引位置进行访问效率很高,用算法描述中的术语,效率是O(1),简单说就是可以一步到位。
  • 除非数组已排序,否则按照内容查找元素效率比较低,具体是O(N),N为数组内容长度,也就是说,性能与数组长度成正比。
  • 添加元素的效率还可以,重新分配和拷贝数组的开销被平摊了,具体来说,添加N个元素的效率为O(N)。
    插入和删除元素的效率比较低,因为需要移动元素,具体为O(N)。

实现接口

  • Collection/List/RandomAccess/Cloneable/Serializable

内部主要组成部分

private transient Object[] elementData;//数组
private int size;//元素长度

数组长度扩展:1.5倍增长

private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    if (newCapacity - minCapacity < 0)
        newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
        newCapacity = hugeCapacity(minCapacity);
    // minCapacity is usually close to size, so this is a win:
    elementData = Arrays.copyOf(elementData, newCapacity);
}

数组长度

        最小长度10
        最大长度Integer.MAX_ARRAY_SIZE

因为实现Iterable支持foreach遍历语法

有两个迭代方法

  public Iterator<E> iterator();//向后
  public ListIterator<E> listIterator();//向前
  public ListIterator<E> listIterator(int index);//指定位置向前

常见错误用法

迭代过程中修改数组结构(remove、add、set)会抛出异常ConcurrentModificationException
删除可用迭代器中的删除,并且删除前调用next方法it.next();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容