下面列出了Array(数组)和ArrayList(集合)的不同点:

Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。

Array大小是固定的,ArrayList的大小是动态变化的。

ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。

对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

一、 数组(Array)

Java中最基本的数据结构,提供动态创建和访问java数组的方法,根据定义的Array类型,其中的元素与类型必须相同。Array是一个固定大小的容器,底层采用的是线性连续空间来存放元素。

优点:在内存中是连续的,速度较快,操作简单。

缺点:定义数组时要定义其长度,不是很灵活,过长过短都会造成问题。不方便进行数据的添加、插入和移除。

二、集合ArrayList

ArrayList同样也是一个容器,但是其大小不固定,底层 采用的也是线性连续空间来存放元素,当线性连续空间不足以存放元素时,又重新申请一片更大的空间(大约是原空间的2倍),将原有的内容移过去。

因此从这里可以看出,Array要比ArrayList的效率高,因为不需要重新申请空间。

优点:命名空间System.Collections下的一部分。大小是动态扩充与收缩的。在声明ArrayList对象时不需要指定它的长度。ArrayList继承了IList接口,可以很方便的进行数据的添加、插入和移除.

缺点:当向集合插入不同类型的数据后(ArrayList将数据当作object存储),在进行数据处理时容易出现类型不匹配的错误,使用时需要进行类型转换处理,存在装箱与拆箱操作,造成性能大量损耗的现象。

ArrayList list = new ArrayList();
list.Add("aa");
list.Add(11);
list[1] = 123;//修改
list.Remove(123);//移除
list.RemoveAt(0);
1
2
3
4
5
6
三、泛型List

List类是ArrayList类的泛型等效类(ArrayList继承了List接口)。它的大部分用法都与ArrayList相似,因为List类(抽象类,无法直接实例化)也继承了List接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。

优点:与集合ArrayList类似且继承IList接口,在声明List集合时也要声明集合内部数据的对象类型,避免了装箱和拆箱的问题。

List<Integer> list=new ArrayList<Integer>();

list.Add(123);

list[0]=111;//修改

list.RemoveAt(0);//移除
1
2
3
4
5
6
7
如果list.Add(“abc”);//编译器就会报错,避免了类型安全问题与装箱拆箱的性能问题。

这里在说明一下ArrayList和LinkedList的区别

ArrayList和LinkedList都实现了List接口,他们有以下的不同点:

1.ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。

2.相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。

3.LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。

文章最后发布于: 2019-07-08 14:54:30

————————————————
版权声明:本文为CSDN博主「熊仙森」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qunqunstyle99/article/details/95045693

Array 和 ArrayList 、 List 以及 LinkedList 的区别的更多相关文章

  1. C#中Array、ArrayList和List三者的区别

    1.Array  在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. 它的空间大小是固定的,空间不够时也不能再次申请,所以需要事前确定合适的空间大小. 2. ...

  2. Array、ArrayList和List三者的区别

    数组 class TestArraysClass { static void Main() { // Declare a single-dimensional array ]; // Declare ...

  3. 基础知识系列☞C#中数组Array、ArrayList和List三者的区别

    数组() #region 数组 //初始化方式_0:先声明再赋值 ]; weekDays_0[] = "Sun"; weekDays_0[] = "Mon"; ...

  4. ArrayList分别与LinkedList、Vector、Array的区别

    ArrayList与LinkedList的区别 ArrayList底层是一个动态数组,LinkedList底层是双向链表 当随机访问List时(get和set操作),ArrayList比LinkedL ...

  5. java集合框架05——ArrayList和LinkedList的区别

    前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容. List概括 先来回顾一下List在Collection中的的框架图 ...

  6. Java中ArrayList与LinkedList的区别

    Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别: 1. ArrayList的实现是基于数组,LinkedList的实现是基于双向 ...

  7. 数组、ArrayList、List、LinkedList的区别

    一.数组 数组在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. 1.一维数组 声明一个数组: ]; 初始化一个数组: ] { , , , , }; //定长 声明并初始化: ...

  8. ArrayList、Vector和LinkedList的区别

    ArrayList.Vector和LinkedList类均在java.util包下,均为可伸缩数组,即可以动态改变长度的数组 ArrayList和Vector都是基于存储元素的Object[] arr ...

  9. 面试题——ArrayList和LinkedList的区别

    List概括 先回顾一下List在Collection的框架图: 从图中可以看出: List是一个接口,他继承Collection接口,代表有序的队列. AbstractList是一个抽象类, ,它继 ...

随机推荐

  1. 五、python中MD5加密

    import hashlib '''用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法'''##### ...

  2. 在windows下使用Mingw搭建模拟Linux

    1.到官网下载最新版Mingw 2.点击安装,最好选择默认路径,如果不是的话,路径中一定不能有空格. 3.选择安装,mingw-developer-toolkit.mingw32-base.mingw ...

  3. 用Vue来实现音乐播放器(三十八):歌词滚动列表的问题

    1.频繁切换歌曲时,歌词会跳来跳去 原因: // 歌词跳跃是因为内部有一个currentLyric对像内部有一些功能来完成歌词的跳跃 //每个currentLyric能实现歌曲的播放跳到相应的位置 是 ...

  4. 阶段3 1.Mybatis_11.Mybatis的缓存_4 mybatis一对多实现延迟加载

    改成单表查询 首先配置的是select.他需要配置的值是accountDao中的方法,查询所有的账户,但是必须有条件.根据用户的id column配置的是id.因为要用user表的id去关联查询 Ac ...

  5. DedeCMS系统设置说明:站点设置

    DedeCMS系统设置说明:站点设置 http://www.ithov.com/master/114583.shtml DedeCMS系统设置说明:站点设置 2012-03-28 15:31来源:风信 ...

  6. oracle dis系列课程总结

    oracle dis系列课程总结 1 bbed安装和介绍 --1 bbed的安装--(Oracle Block Brower and EDitor Tool) 2 controlfile 丢失的恢复 ...

  7. [Mac Terminal] ___MAC终端清屏快捷键

    清全屏: command + K 清上一行命令:command +  L

  8. AutoML文献阅读

    逐步会更新阅读过的AutoML文献(其实是NAS),以及自己的一些思考 Progressive Neural Architecture Search,2018ECCV的文章: 目的是:Speed up ...

  9. Linux系统常用命令之top

    top - 06:58:37 up 7 days, 23:36, 2 users, load average: 0.00, 0.01, 0.05Tasks: 716 total, 1 running, ...

  10. Java本周总结1

    这两周我上认真的课应该就是李老师的课了/ 第一周主要跟我们讲述了java的发展史何java开发环境的搭建,带领我们走进了java,李老师的精彩讲述让我们对Java有了深刻的认识/. jdk下载安装包我 ...