zoukankan      html  css  js  c++  java
  • java ArrayList

    让我们来看看ArrayList实现的接口,

    实现了Serializable, Cloneable, Iterable, Collection, List, RandomAccess, 下面来讲解一下这5个接口的特点吧,

    • Serializable
      • Serializable 是一个标记接口,它用于标记接口类,接口必须由其对象需要持久化的类来实现,序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。
    • Cloneable接口的作用
      • cloneable其实就是一个标记接口,只有实现这个接口后,然后再类中重写Object的clone方法,然后通过类调用clone方法才能成功,如果不实现该接口,则会抛出CloneNoSupportedException(异常不被支持异常)。
    • Iterable
      • 实现此接口允许对象成为进行迭代。 请参阅 For-each 循环。
    • Collection
      • 集合层级的根接口,它定义了一组可以重复的对象。
    • List
      • 有序集合(也称为序列)。可以精确控制每个元素在列表中的插入位置。 用户可以通过它们的整数索引(在列表中的位置)访问元素,并在列表中搜索元素。
    • RandomAccess
      • List 实现使用的标记接口来指示它们支持快速随机访问。 此接口的主要目的是允许通用算法改变其行为,以在应用于随机或顺序访问列表时提供良好的性能。

    ArrayList的特点:

    • ArrayList底层使用的是动态数组,长度固定,默认容量是10。
    • ArrayList可以包含重复元素。
    • 不能直接更改 ArrayList 的大小,可以使用各种添加、插入和删除方法来间接完成此操作。
    • 添加更多元素时,动态数组会扩展。 所以不需要提前确定大小。
    • 可以快速查找。 就像数组一样,检索给定索引处的元素需要。
    • ArrayList的缺点:
      • 在动态数组添加新的元素需要时间,但是如果动态数组没有任何空间容纳新的条目,它就需要扩展,这也需要 O(n)O(n) 时间。
      • ArrayList 线程不安全。
      • 昂贵的插入和删除。 就像数组一样,元素彼此相邻存储。 因此,在数组中间添加或删除项目需要“跳过”其他元素,这需要时间。

    细节:

    • 当分配动态数组时,动态数组实现会生成一个底层固定大小的数组。 起始大小取决于实现——假设我们的实现使用 10 个索引。 现在假设我们将 4 个条目附加到我们的动态数组中。 此时,我们的动态数组的长度为 4。但底层数组的长度为 10。
    • 如果我们尝试追加一项条目,但我们的数组容量已经满了怎么办?
      • 为了腾出空间,动态数组会自动创建一个新的、更大的底层数组。 通常大一倍。
      • 为什么不直接扩展现有数组? 因为那个内存可能已经被另一个程序占用了。
      • 每个条目都必须单独复制到新数组中。
  • 相关阅读:
    GLSL
    c++ 的垃圾收集(garbage collector
    ZZ 红黑树,并非想象中的那么复杂
    【转载】我心目中的android机器档次
    代码优化
    qqww
    solve Ax+By+C=0
    the c10k problem
    标 题: 腾讯面试题目(PHP程序员)
    zz 软件开发流程工具一览
  • 原文地址:https://www.cnblogs.com/jamal/p/15111359.html
Copyright © 2011-2022 走看看