黑马程序员技术交流社区

标题: 说出ArrayList,Vector, LinkedList的存储性能和特性 [打印本页]

作者: 陈建华    时间: 2012-12-6 15:16
标题: 说出ArrayList,Vector, LinkedList的存储性能和特性
说出ArrayList,Vector, LinkedList的存储性能和特性

作者: 马清泽    时间: 2012-12-8 15:56
ArrayList和Vector在底层都是用数组来存储数据,插入时就会创造一个新数组并把数据全部转移至其内,因此在这两种数据结构中插入数据会有很大损耗,但是由于数组特性,他们索引取出数据性能较好。Vector更注重线程安全,所以通用性较差,大多数情况下可以用Arraylist就够了。LinkedList内部结构是双向链表,即保存一种含有前后索引的对象的引用的对象的方式(好纠结。。。),所以插入时只需要更改有限几个对象内的引用就可以了,所以插入损耗低。但是如果要以索引取出对象就麻烦了。在正着顺序遍历或倒着遍历时LinkedList性能也很好,只是在随机读取(按索引读取)时损耗高
作者: HeiMa-黄倲江    时间: 2012-12-8 16:24
ArrayList  底层是用数组来存储数据!      索引数据快  而插入数据慢.
linkedList 内部结构是双向链表!        索引稍慢 而插入数据稍快.

Vector  底层跟ArrayList一样!  通用性差,注重线程安全. 通常用ArrayList就行了
作者: 吴健    时间: 2012-12-8 22:18
本帖最后由 吴健 于 2012-12-9 10:04 编辑

    ArrayList和Vector都是基于数组实现的List类,所以ArrayList类和Vector类中封装了一个动态再分配的object[]数组。每个ArrayList和Vector对象有一个capacity属性,这个capacity表示它们所 封装的object[]数组的长度。当向ArrayList或Vector添加元素时,capacity会自动增加。
    Vector是一个古老的集合,从JDK1.0开始时就有了,从JDK1.2以后,就将Vector改为实现List接口,从而导致Vector中有一些功能重复的方法。
    ArrayList和Vector的区别是:ArrayList是线程不安全的,当多个线程访问同一个ArrayList时,如果有超过一个线程修改ArrayList集合时,需要保证程序的同步性。但是Vector是线程安全的,但是就因为如此Vector的性能要比ArrayList差。
    LinkedList是基于链表实现的List类,对与顺序访问集合中的元素进行了优化,特别是插入、删除时效率高。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2