zoukankan      html  css  js  c++  java
  • Array 和 ArrayList 、 List 以及 LinkedList 的区别


    下面列出了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

  • 相关阅读:
    Linux修改主机名称
    Druid监控SQL语句
    CentOS7.5搭建Hadoop分布式集群
    CentOS7.5 解决ifconfig报错
    windows 用VMware创建linux虚拟机,安装操作系统CentOS7.2
    MySQL报错this is incompatible with sql_mode=only_full_group_by
    CentOS配置Redis环境变量
    CentOS7.4搭建GitLab
    修改服务器路由策略
    Centos7 安装python3
  • 原文地址:https://www.cnblogs.com/eryun/p/11890156.html
Copyright © 2011-2022 走看看