表-ArrayList的实现

来源:互联网 发布:js canvas clip 编辑:程序博客网 时间:2024/06/05 16:44

  • ArrayList 是长度可变的数组,并实现了迭代器。
  • 可以存储不同类型的数据(因为在存储值类型的时候依然采用未装箱的模式,即只存储引用地址。比如存储int 8,会封装为integer,导致性能下降),数组不可以。
  • 虽然可以存储不同的数据类型,但是可以通过泛型来规范。使用泛型也可以抵消装箱的性能消耗
  • ArrayList的默认顺序就是插入顺序,可以使用Collections.sort来重新排序。一种是数组内的对象实现Comparable接口,一种是实现java.util.Comparator作为sort参数
  • sort 在jdk6中是合并排序,在jd7中是timsort


  1. 增:只在末尾插入的话,O(1),如果是中间插入的话,O(n)
  2. 删:通过下标删除的话,O(n), 通过值删除的话 ,O(n^2)
  3. 改:O(1)
  4. 查:因为ArrayLis的实现就是一个一维数组,所以可以快速通过下标读取数据,O(1),但是如果是遍历查找的话,为O(n)
  5. 迭代器:remove的时候会还是会O(n) ,这是数组本身的限制。
                             迭代器使用内部类来实现,因为内部类可以访问外部类成员,并对外部类来说是封闭的。
                             如果使用嵌套类的话,编译器其实无法知道这个迭代器到底是谁的。但是内部类从属于对象,所以没有语义问题。
                     从迭代器设计模式来考虑的话,从属于对象,对外部类封闭也是极好的


ps:泛型的好处

  • 类型安全(Type Safety):使用泛型定义的类型,在使用时仅能使用指定的类型或类型的衍生类型。
  • 性能(Performance):泛型移除了运行时类型检测,消除了装箱和拆箱的开销。
  • 可重用(Reusability):泛型打破了数据结构与存储数据类型之间的紧耦合。这提高了数据结构的可重用性

0 0