前言

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

正话(个人的见解,有误请多指教)

惯例先明白它是什么?

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

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

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

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

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

那么它有什么用呢?

动态的增加和减少元素,实现了ICollection和list接口。当然还可以灵活得选择数组的大小。

  1. 删除作用,可以实现数组不能的删除

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

![image.png](https://i.loli.net/2019/12/15/rlvCPUWqksK3oTf.png)

3.常用方法

![image.png](https://i.loli.net/2019/12/15/2dPnz9GAHgTweyi.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;
      list2.add(num);
      }

ArrayList 与数组的“纠缠不清”的暧昧的更多相关文章

  1. Java学习笔记51:数组转ArrayList和ArrayList转数组技巧

    ArrayList转数组: public class Test { public static void main(String[] args) { List<String> list = ...

  2. ArrayList类源码解析——ArrayList动态数组的实现细节(基于JDK8)

    一.基本概念 ArrayList是一个可以添加对象元素,并进行元素的修改查询删除等操作的容器类.ArrayList底层是由数组实现的,所以和数组一样可以根据索引对容器对象所包含的元素进行快速随机的查询 ...

  3. 使用Arraylist将数组中元素随机均等乱序分为N个子数组

    使用Arraylist将数组中元素随机均等乱序分为N个子数组 觉得有用的话,欢迎一起讨论相互学习~Follow Me 为了将数组中的元素 随机地 ,均等地, 不重复地 ,划分到N个子数组中 使用Arr ...

  4. 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

    方法一:使用Arrays.asList()方法   1 2 String[] asset = {"equity", "stocks", "gold&q ...

  5. ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点

    LinkedList接口(在代码的使用过程中和ArrayList没有什么区别) ArrayList底层是object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点. 而在L ...

  6. ArrayList深度分析:ArrayList和数组间的相互转换

    一.ArrayList转换为数组ArrayList提供public <T> T[] toArray(T[] a)方法返回一个按照正确的顺序包含此列表中所有元素的数组,返回数组的运行时类型就 ...

  7. Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别

    ArrayList和Vector的区别ArrayList与Vector主要从二方面来说.  一.同步性:   Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步 ...

  8. 固定分隔符字符串与数组互转及ArrayList与数组(Array)互转

    1.字符串转数组 这个相信多数人都会常用,string.split方法,分隔符可以为多个.详细信息参见MSDN string[] actionCfgs = _para.Split(new char[] ...

  9. ArrayList和数组间的相互转换

    开发中不免碰到List与数组类型之间的相互转换,举一个简单的例子: package test.test1; import java.util.ArrayList; import java.util.L ...

随机推荐

  1. 【Maven】聚合

    [Maven]聚合 转载: 使用聚合一次能为多个 maven 项目执行命令,而不用到每一个项目下去执行命令. 聚合 pom 的特殊之处 1.packaging 配置 pom <packaging ...

  2. Python3之Django的Cookie与Session的使用

    一.Cookie的使用 1.设置Cookie url.set_cookie("tile","zhanggen",expires=value,path='/' ) ...

  3. Socket与系统调用深度分析

    学习一下对Socket与系统调用的分析分析 一.介绍 我们都知道高级语言的网络编程最终的实现都是调用了系统的Socket API编程接口,在操作系统提供的socket系统接口之上可以建立不同端口之间的 ...

  4. aspnet boilerplate 随笔一

    使用abp模板进行项目开发: 1:准备工作:我使用v2.x版本,所以会依赖.net core 2.2 查看并更新本地环境: 更新.net core版本:cmd 运行 dotnet --version查 ...

  5. tyvj 1387 迷你火车头

    dp百题进度条[1/100] 一列火车有一个火车头拖着一长串的车厢,每个车厢有若干个乘客. 一旦火车头出了故障,所有的车厢就只能停在铁轨上了,因此铁路局给每列火车配备了三个迷你火车头,每个迷你火车头可 ...

  6. vscode搭建C/C++环境

    windows安装Mingw-w64 Mingw-w64安装 准备工作 创建文件夹Vc_c++ 在Vc_c++文件夹下创建下面两个文件夹 在g++下创建demo.cpp 在gcc下创建demo.c 打 ...

  7. 基于Tomcat部署的Geoserver配置Geowebcache,并转发ArcGIS切片

    1.将GeowebCache的war包解压到tomcat的webapp下,打开war包中的WEB-INF中的web.xml文件,同时创建一个你想保存geowencache的切片的空文件夹,例如我命名叫 ...

  8. 开源WAF工具ModSecurity

    0 前言 ModSecurity是一个开源的跨平台Web应用程序防火墙(WAF)引擎,用于Apache,IIS和Nginx,由Trustwave的SpiderLabs开发.作为WAF产品,ModSec ...

  9. 数据库学习笔记day03

    创建两个表,一个名为emp,一个名为dept,并且插入数据 create table emp(empno number(4,0),ename varchar2(10),job varchar2(9), ...

  10. crontab 定时任务没有响应 检测步骤

    设置规则 # 每分钟执行一次 */1 * * * * /scripts/script.sh # 每小时执行一次 0 */1 * * * /scripts/script.sh # 每天 02:00 执行 ...