ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的

数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉

及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 中的方法由

于添加了 synchronized 修饰,因此 Vector 是线程安全的容器,但性能上较

ArrayList 差,因此已经是 Java 中的遗留容器。LinkedList 使用双向链表实现存

储(将内存中零散的内存单元通过附加的引用关联起来,形成一个可以按序号索

引的线性结构,这种链式存储方式与数组的连续存储方式相比,内存的利用率更

高),按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本

项的前后项即可,所以插入速度较快。Vector 属于遗留容器(Java 早期的版本中

提供的容器,除此之外,Hashtable、Dictionary、BitSet、Stack、Properties

都是遗留容器),已经不推荐使用,但是由于 ArrayList 和 LinkedListed 都是非

线程安全的,如果遇到多个线程操作同一个容器的场景,则可以通过工具类

Collections 中的 synchronizedList 方法将其转换成线程安全的容器后再使用(这

是对装潢模式的应用,将已有对象传入另一个类的构造器中创建新的对象来增强

实现)。

补充:遗留容器中的 Properties 类和 Stack 类在设计上有严重的问题,Properties

是一个键和值都是字符串的特殊的键值对映射,在设计上应该是关联一个

Hashtable 并将其两个泛型参数设置为 String 类型,但是 Java API 中的

Properties 直接继承了 Hashtable,这很明显是对继承的滥用。这里复用代码的

方式应该是 Has-A 关系而不是 Is-A 关系,另一方面容器都属于工具类,继承工具

类本身就是一个错误的做法,使用工具类最好的方式是 Has-A 关系(关联)或

Use-A 关系(依赖)。同理,Stack 类继承 Vector 也是不正确的。Sun 公司的工

程师们也会犯这种低级错误,让人唏嘘不已。

阐述 ArrayList、Vector、LinkedList 的存储性能和特性?的更多相关文章

  1. 请说出ArrayList,Vector, LinkedList的存储性能和特性

    请说出ArrayList,Vector, LinkedList的存储性能和特性 解答:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都 ...

  2. 说出ArrayList,Vector, LinkedList的存储性能和特性

     ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插 ...

  3. 【Java面试题】37 说出ArrayList,Vector, LinkedList的存储性能和特性

    ArrayList和Vector都是使用数组方式存储数据,此 数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插 ...

  4. ArrayList,Vector, LinkedList的存储性能和特性

    ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入 ...

  5. ArrayList,Vector, LinkedList 的存储性能和特性

    ArrayList 和Vector他们底层的实现都是一样的,都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内 ...

  6. ArrayList,Vector, LinkedList的存储性能和特性?

    ArrayList,Vector, LinkedList的存储性能和特性? ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入或删除时非常麻烦. ...

  7. 一道关于:ArrayList、Vector、LinkedList的存储性能和特性 的面试题

    ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢 ...

  8. 阐述ArrayList、Vector、LinkedList的存储性能和特性。

    答:ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快 ...

  9. 阐述ArrayList、Vector、LinkedList的存储性能和特性?(转)

    ArrayList 和Vector他们底层的实现都是一样的,都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内 ...

  10. 阐述ArrayList、Vector、LinkedList的存储性能和特性?

    ArrayList 和Vector他们底层的实现都是一样的,都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内 ...

随机推荐

  1. MySQL让人又爱又恨的多表查询

    1. 前言 在SQL开发当中,多表联查是绝对绕不开的一种技能.同样的查询结果不同的写法其运行效率也是千差万别. 在实际开发当中,我见过(好像还写过~)不少又长又臭的查询SQL,数据量一上来查个十几分钟 ...

  2. 深入理解ThreadLocal及其变种

    ThreadLocal 定义 ThreadLocal很容易让人望文生义,想当然地认为是一个"本地线程". 其实,ThreadLocal并不是一个Thread,而是Thread的局部 ...

  3. ubuntu系统黑屏,只有一个光标

    使用easyBCD删除原ubuntu引导,重建 添加新条目 引导选择900M左右那个选项

  4. MySQL 学习笔记(一)MySQL 事务的ACID特性

    MySQL事务是什么,它就是一组数据库的操作,是访问数据库的程序单元,事务中可能包含一个或者多个 SQL 语句.这些SQL 语句要么都执行.要么都不执行.我们知道,在MySQL 中,有不同的存储引擎, ...

  5. Qt:QJsonObject

    0.说明 QJsonObject在逻辑上就是一个Map或Dict!记住这一点对理解它的方法.说明很有帮助. QJsonObject类封装了JSON Object. JSON Object是一个Key- ...

  6. Context包源码解析(附面经)

    Context包源码解析 Context就相当于一个树状结构 最后请回答一下这个问题:context包中的方法是线程安全吗? Context包中主要有一个接口和三个结构体 Context接口 type ...

  7. git命令合集

    ##快捷键 ##一. 快捷键 1. 清屏快捷键 control+L 2. vim快捷操作 * control+b 往上翻页 * Control+f 往下翻页 * shift+g 回到末尾 3. oh ...

  8. Python:pyglet学习(3):游戏循环

    在我们编游戏时,经常会用到一个无限循环,这就叫游戏循环. 先用@win.event试试 import pyglet as p win=p.window.Window(800,600) @win.eve ...

  9. chrome浏览器添加JSON插件

    1.下载JSON-Handel插件 1) http://jsonhandle.sinaapp.com 点击下载会将json-handle 插件(crx)下载本地 2.打开Chrome浏览器地址栏输入: ...

  10. laravel 和 tp的区别

    https://www.cnblogs.com/xiaoyantongxue/p/15442844.html laravel    数据库储存的时间字段 created_at  updated_at ...