ArrayList 与数组的“纠缠不清”的暧昧

前言

能不能有一种数组能够在删除掉某些元素自动缩小就行了。但是话说哪里学的Java?数组能删除元素吗?今天讲一下一个特殊对象——ArrayList,它的出现与存在和数组有着几分相似。下面按照它是什么-有什么用-怎么用来说?再讲讲与数组的区别?算法

正话(我的的看法,有误请多指教)

惯例先明白它是什么?

  • 源码搞上!!!很明显它是一个类,继承(extends)了AbstractList,实现(implements)了List、RandomAcess等。(extends能够理解为全盘继承了父类的功能。implements能够理解为为这个类附加一些额外的功能)。它是一个容量能够自动增加的动态数组(并不是数组),能够支持删除操做。数组

  • image.png

  • image.png

  • 它的初始容量为10。下面的构造方法第一个就是构造容量为10的。要想改变这个容量,就像第二个的构造方法那样就能够了。第三个是构造一个包含指定集合的元素的列表,按照他们由集合的迭代器返回的顺序。安全

image.png
  • 值得一提的是,Java集合框架中定义了List接口,并且只有两个实现,除了这个ArrayList还有LinkedList。在数据结构与算法分析书上有着这么两句结论,具体获得是在书中经过了算法得来的。LinkedList在Java和C#中其实是在使用双链表。数据结构

    • ArrayList优点是在末尾添加,删除,获取和设置(set and get)。
    • LinkedList优点是从开头添加级删除开头元素。
  • 数组表(ArrayList)和数组很类似在于,读取的时候为O(1),在插入时候就变为O(n)了,不一样在于这个数组表能够增长长度,在添加时候,只需表尾编号加一即可以肯定新元素了。多线程

  • ArrayList不是线程安全的。线程安全是说一个对象能够彻底被多个线程同时使用,不出问题。这个在后面的深刻学习虚拟机会常常遇到——使用多线程之间同步synchronized或使用锁(lock)能够解决。框架

那么它有什么用呢?

动态的增长和减小元素,实现了ICollection和list接口。固然还能够灵活得选择数组的大小。dom

  1. 删除做用,能够实现数组不能的删除

    image.png
  2. 实现添加整个容量,添加元素到数组表中

    image.png

3.经常使用方法
学习

image.png

怎么用

  1. 想要存储数字,也就是基本数据类型,就可使用包装类(位于java.lang下)。线程

    • 基本类型 包装类
      int Integer
      byte Byte
      short Short
      long Long
      float Float
      doublr Double
      char Character
      boolean Boolean
    • ArrayList<Integer> list = new ArrayList<>;//这样建立不会报错了
  2. 实例:生成1-30之间的随机数,添加到集合里,存储5个

    • //主代码
      ArrayList<Integer> list2= new ArrayList();
      Random r = new Random();
      for(int i = 0; i < 5; i++){
          int num = r.nextInt(30) + 1;
          list.add(num);
      }
相关文章
相关标签/搜索