zoukankan      html  css  js  c++  java
  • ArrayList总结

    //img-blog.csdn.net/20160318170305828

    ArrayList

    1.extends AbstractList 实现List<E>->Collection<e>->Iterable,RandomAccess,Serializable,Cloneable,

    2.非线程安全的,动态数组实现的,默认大小为10,动态扩容为1.5倍+1,数组复制,System.arrayCopy,支持null值,

    3.modcount fast-fail ConcurrentModificationException

    4.size、isEmpty、get、set这样的方法时间复杂度为O(1),而像indexOf、add、remove等方法,最坏的情况下(如添加元素到第一个位置,删除第一个位置的元素,找最后一个元素的下标等)时间复杂度为O(n),add,remove 花费线程时间O(n),get,set花费常量时间O(1)

    5.通过Collections.synchronizedList()变长线程安全

    6.RandomAccess,通过下标遍历快,通过迭代器遍历要慢,foreach对于集合框架,编译解析成的是Iterator的遍历

    实现RandomAccess接口的集合有:ArrayList, AttributeList, CopyOnWriteArrayList, RoleList, RoleUnresolvedList, Stack, Vector

    ArrayList和LinkedList的区别

    1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
    2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
    3. 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。

    ArrayList和Vector的区别

    1. Vector和ArrayList几乎是完全相同的,唯一的区别在于Vector是同步类(synchronized),属于强同步类。因此开销 就比ArrayList要大,访问要慢。正常情况下,大多数的Java程序员使用ArrayList而不是Vector,因为同步完全可以由程序员自己来 控制。
    2. Vector每次扩容请求其大小的2倍空间,而ArrayList是1.5倍+1。
    3. Vector还有一个子类Stack.
  • 相关阅读:
    spark 系列之六 SparkStreaming数据源之socket流
    spark 系列之五 SparkStreaming数据源之文件流
    spark 系列之四 Spark数据源之关系型数据库
    spark 系列之三 RDD,DataFrame与DataSet之间的转化
    spark 系列之二 Dataframe的使用
    spark 系列之一 RDD的使用
    Java Int类型与字符,汉字之间的转换
    Java实现栈
    名字的漂亮度
    在字符串中找出连续最长的数字串
  • 原文地址:https://www.cnblogs.com/lelouchKOP/p/5765175.html
Copyright © 2011-2022 走看看