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接口。当然还可以灵活得选择数组的大小。

  1. 删除作用,可以实现数组不能的删除
    image.png
  2. 实现添加整个容量,添加元素到数组表中
    image.png

3.常用方法

image.png

怎么用

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

    • 基本类型包装类
      intInteger
      byteByte
      shortShort
      longLong
      floatFloat
      doublrDouble
      charCharacter
      booleanBoolean
    • 
      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);
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值