黑马程序员技术交流社区
标题:
说出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