zoukankan      html  css  js  c++  java
  • ArrayList

    一、扩容

    1. 检查容量

    2. 如果不够,新建一个更长的数组

    3. 把老的数据,使用Arrays.copyOf方法,拷贝到新的数组

    4. 引用指向新的数组

    二、ArrayList使用场景

    1. 尾部插入操作,如果不扩容,效率很高;但是在指定位置插入元素,后面的元素需要移动,效率很低

    2. 尾部删除操作,效率很高;但是在指定位置删除元素,效率很低

    3. 如果插入时扩容,会调用System.arrayCopy()方法,拷贝数组效率低

    4. 所以ArrayList适合读数据比较多,不会频繁插入和删除的场景

    5. 插入和删除操作比较频繁的情况下,使用LinkedList,因为链表不适合访问,而适合插入和删除

    三、安全

    1. 当做参数时,需要考虑原始的arrayList会不会改变

    2. 可以把参数做一个拷贝,方法里使用这个拷贝

    四、复制

    1. clone()方法,浅拷贝

    2. 构造方法,把另一个ArrayList当做参数传入,浅拷贝

    3. Collection的copy方法,深拷贝

    五、subList

    1. 截取list的一部分,返回list

    2. 不可强制转换为ArrayList,否则会报错

    3. subList返回的是一个视图,并没有重新定义一个List,而是返回了原来ArrayList的一部分

    4. SubList是ArrayList的一个内部类,他们没有继承关系,强制转换会报错

    5. 结构不改变:更新了subList里的某个元素,原来的ArrayList里的相对应的元素也会改变;反之一样

    6. 结构改变:

    a. 增删了subList里的某个元素,原来ArrayList的对应的元素也会改变

    b. 增删了原来ArrayList的元素,会报异常ConcurrentModificationException

    7. 可以创建subList的拷贝,然后试用这个拷贝,就不影响原来的ArrayList了

    六、特性

    1. 元素类型是引用类型,基本类型会自动转换成引用类型

    2. 有序,先添加的元素在后添加的元素前面

  • 相关阅读:
    linux文件锁flock【转】
    无尽的悲伤
    go的临时对象池--sync.Pool
    golang 小知识-持续更新中
    【转】Go Channels
    Golang文件名命名规则
    Parquet存储格式
    预装的Office2016,文件图标表显示以及新建失败问题解决 方法
    Gamma编码及Delta编码概述
    java web开发环境配置系列(二)安装tomcat
  • 原文地址:https://www.cnblogs.com/june0816/p/6575232.html
Copyright © 2011-2022 走看看