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 ...
随机推荐
- 【python测试开发栈】—理解python深拷贝与浅拷贝的区别
内存的浅拷贝和深拷贝是面试时经常被问到的问题,如果不能理解其本质原理,有可能会答非所问,给面试官留下不好的印象.另外,理解浅拷贝和深拷贝的原理,还可以帮助我们理解Python内存机制.这篇文章将会通过 ...
- RNN循环神经网络
1.为什么还会有RNN? CNN(卷积神经网络)我们会发现, 他们的输出都是只考虑前一个输入的影响而不考虑其它时刻输入的影响, 比如简单的猫,狗,手写数字等单个物体的识别具有较好的效果. 但是, 对于 ...
- Codeforces Round #590 (Div. 3)
A. Equalize Prices Again 题目链接:https://codeforces.com/contest/1234/problem/A 题意:给你 n 个数 , 你需要改变这些数使得这 ...
- JS 正则表达式^$详解,脱字符^与美元符$同时写表示什么意思?
壹 ❀ 引 对于初学正则的同学来说,^$这两个看似简单的字符却在使用中总让匹配结果超出我们的预期,^什么时候表示行首什么时候表示反义?^ $两个一起写表示什么含义?今天我们就来详细聊聊这两个字符. ...
- c语言入门到精通怎么能少了这7本书籍?
C语言作为学编程最好的入门语言,对一个初进程序大门的小白来说是很有帮助的,学习编程能培养一个人的逻辑思维,而C语言则是公认的最符合人们对程序的认知的一款计算机语言,很多大学都选择了使用C语言作为大学生 ...
- Blazor(WebAssembly) + .NETCore 实现斗地主
之前群里大神发了一个 html5+ .NETCore的斗地主,刚好在看Blazor WebAssembly 就尝试重写试试. 还有就是有些标题党了,因为文章里几乎没有斗地主的相关实现:),这里主要介绍 ...
- react-native run-ios “Could not find iPhone X simulator”
问题 这个问题发生在旧的RN版本(0.57,0.58(<0.58.4),-)和Xcode 10.3中,其中可用模拟器的名称得到了一些调整 在文件node_modules/@react nativ ...
- Android 框架布局 FrameLayout
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android=" ...
- 搭建Android开发环境 以及 ionic 编译安卓app步骤
1. 下载安装JDK 下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm ...
- Hyperledger Fabric:最简单的方式测试你的链码
一直以来,写完链码进行测试都要先搭建一个Fabric环境,然后安装链码进行测试,实际上Fabric提供了最为简单的方式可以允许我们对编写的应用链码进行功能测试,不需要搭建一个完整的Fabeic环境.而 ...