ArrayList 与数组的“纠缠不清”的暧昧
前言
能不能有一种数组可以在删除掉某些元素自动缩小就好了。可是话说哪里学的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接口。当然还可以灵活得选择数组的大小。
- 删除作用,可以实现数组不能的删除

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

3.常用方法
怎么用
想要存储数字,也就是基本数据类型,就可以使用包装类(位于java.lang下)。
基本类型 包装类 int Integer byte Byte short Short long Long float Float doublr Double char Character boolean Boolean ArrayList<Integer> list = new ArrayList<>;//这样创建不会报错了
实例:生成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 与数组的“纠缠不清”的暧昧的更多相关文章
- Java学习笔记51:数组转ArrayList和ArrayList转数组技巧
ArrayList转数组: public class Test { public static void main(String[] args) { List<String> list = ...
- ArrayList类源码解析——ArrayList动态数组的实现细节(基于JDK8)
一.基本概念 ArrayList是一个可以添加对象元素,并进行元素的修改查询删除等操作的容器类.ArrayList底层是由数组实现的,所以和数组一样可以根据索引对容器对象所包含的元素进行快速随机的查询 ...
- 使用Arraylist将数组中元素随机均等乱序分为N个子数组
使用Arraylist将数组中元素随机均等乱序分为N个子数组 觉得有用的话,欢迎一起讨论相互学习~Follow Me 为了将数组中的元素 随机地 ,均等地, 不重复地 ,划分到N个子数组中 使用Arr ...
- 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)
方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold&q ...
- ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点
LinkedList接口(在代码的使用过程中和ArrayList没有什么区别) ArrayList底层是object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点. 而在L ...
- ArrayList深度分析:ArrayList和数组间的相互转换
一.ArrayList转换为数组ArrayList提供public <T> T[] toArray(T[] a)方法返回一个按照正确的顺序包含此列表中所有元素的数组,返回数组的运行时类型就 ...
- Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别
ArrayList和Vector的区别ArrayList与Vector主要从二方面来说. 一.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步 ...
- 固定分隔符字符串与数组互转及ArrayList与数组(Array)互转
1.字符串转数组 这个相信多数人都会常用,string.split方法,分隔符可以为多个.详细信息参见MSDN string[] actionCfgs = _para.Split(new char[] ...
- ArrayList和数组间的相互转换
开发中不免碰到List与数组类型之间的相互转换,举一个简单的例子: package test.test1; import java.util.ArrayList; import java.util.L ...
随机推荐
- 【Java Web开发学习】跨域请求
[Java Web开发学习]跨域请求 ================================================= 1.使用jsonp ===================== ...
- 【Java】在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整 ...
- Asp.Net MVC中Aplayer.js音乐播放器的使用
1.前言: Aplater.js是一款可爱.漂亮的Js音乐播放器,以前就了解过也弄过一些,现在就用mp3的格式来在.Net里面开发.管网 https://aplayer.js.org/ 2.入手: 在 ...
- 【GZOI 2019】特技飞行
Problem Description 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代表着水平位置,纵坐标代表着飞行高度. ...
- Visual Studio中相对路径中的宏定义
$(RemoteMachine) 设置为“调试”属性页上“远程计算机”属性的值.有关更多信息,请参见更改用于 C/C++ 调试配置的项目设置. $(References) 以分号分隔的引用列表被添加到 ...
- Python—类和实例对象
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可 ...
- redhat 常用命令记录
开机设置网络信息: vim /etc/rc.local 然后在里面输入设置信息 ifconfig eth0:0 192.168.127.130 netmask 255.255.255.0 up i ...
- WebRTC分支提交记录
截至2019.8.6日,webrtc官网release了M76,具体可参考:release notes WebRTC分支提交记录可以查看git commit记录. 方法:git checkout 到特 ...
- C#使用Linq to csv读取.csv文件数据2_处理含有非列名数据的方法(说明信息等)
第一篇博客为:https://www.cnblogs.com/lxhbky/p/11884474.html 本文主要是为了解决上面博客遗留的一个含有不规范数据的一种方法,目前暂时没有从包里发现可以从第 ...
- C# .NET的BinaryFormatter、protobuf-net、Newtonsoft.Json以及自己写的序列化方法序列化效率和序列化后的文件体积大小对比
测试结果如下图: 测试结果整理后: 结论: 1.这几个工具中,protobuf-net序列化和反序列化效率是最快的 2.BinaryFormatter和Newtonsoft.Json反序列化慢的比较多 ...