zoukankan      html  css  js  c++  java
  • vector,linkedList与arrayList区别和适用场景

        List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。

        3个具体实现类的相关区别如下:

    ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
    Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
    LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
         查看Java源代码,发现当数组的大小不够的时候,需要重新建立数组,然后将元素拷贝到新的数组内,ArrayList和Vector的扩展数组的大小不同。

    ArrayList和LinkedList的区别如下: 


           1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对 ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是 统一的,分配一个内部Entry对象。 
           2.在ArrayList的 中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。 
           3.LinkedList不支持高效的随机元素访问。
           4.ArrayList的空 间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在每一个元素都需要消耗相当的空间 

           可以这样说:当操作是在一列 数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中 间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。 

           所以,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是对其它指定位置的插入、删除操作,最好选择LinkedList。
     

  • 相关阅读:
    阿里云ECS7天训练营——05基于ECS搭建Java Web开发环境
    阿里云ECS7天训练营——04打造离线下载服务器
    阿里云ECS7天训练营——02搭建wiki知识库
    阿里云ECS7天训练营——03基于云服务器构建微信公众号管理系统
    阿里云ECS7天训练营——01打造专属云笔记
    Spring Cloud Config实现配置中心
    shell脚本条件判断if中-a到-z的意思
    Linux定时任务Crontab命令详解
    Linux下的tar压缩解压缩命令详解
    谈谈注册中心 zookeeper 和 eureka中的CP和 AP
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602157.html
Copyright © 2011-2022 走看看