ArrayList,LinkedList,Vector的关系和区别
来源:互联网 发布:iphone7屏幕录制软件 编辑:程序博客网 时间:2024/05/03 21:27
一、同步性
ArrayList,LinkedList是不同步的,而Vector是的。所以如果要求线程安全的话,可以使用ArrayList或LinkedList,可以节省为同步而耗费开销。但在多线程的情况下,有时候就不得不使用Vector了。当然,也可以通过一些办法包装ArrayList,LinkedList,使他们也达到同步,但效率可能会有所降低。
二、数据增长
从内部实现机制来讲ArrayList和Vector都是使用Objec的数组形式来存储的。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。
三、检索、插入、删除对象的效率
ArrayList和Vector中,从指定的位置(用index)检索一个对象,或在集合的末尾插入、删除一个对象的时间是一样的,可表示为O(1)。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行(n-i)个对象的位移操作。
LinkedList中,在插入、删除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在索引一个元素的时候比较慢,为O(i),其中i是索引的位置。
所以,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是对其它指定位置的插入、删除操作,最好选择LinkedList
配置集合类的初始大小
在Java集合框架中的大部分类的大小是可以随着元素个数的增加而相应的增加的,我们似乎不用关心它的初始大小,但如果我们考虑类的性能问题时,就一定要考虑尽可能地设置好集合对象的初始大小,这将大大提高代码的性能。
比如,Hashtable缺省的初始大小为101,载入因子为0.75,即如果其中的元素个数超过75个,它就必须增加大小并重新组织元素,所以,如果你知道在创建一个新的Hashtable对象时就知道元素的确切数目如为110,那么,就应将其初始大小设为110/0.75=148,这样,就可以避免重新组织内存并增加大小。
- ArrayList,LinkedList,Vector的关系和区别
- ArrayList,LinkedList,Vector的关系和区别
- ArrayList和Vector和LinkedList的区别
- ArrayList Vector LinkedList 的区别和用法
- Vector、ArrayList和LinkedList的区别
- ArrayList、LinkedList和Vector 的区别
- arrayList 和 LinkedList ,Vector 的区别
- ArrayList、LinkedList和Vector的区别
- ArrayList,Vector和LinkedList的区别
- Vector,ArrayList,LinkedList的特点和区别
- LinkedList、ArrayList和Vector的区别
- LinkedList、ArrayList、 Vector的区别和详解
- ArrayList和LinkedList、Vector的区别?
- ArrayList、Vector和LinkedList的区别
- vector和arrayList,LinkedList区别
- vector和arrayList,LinkedList区别
- Vector, ArrayList和LinkedList区别
- ArrayList、Vector和LinkedList区别
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- 三角形类和点类的结合(第六周实验报告(四))
- 第6周任务1
- keil 编译器中 C51 代码关于sprintf函数char参数的小问题
- Android Call 功能在各个frameworks层中的结构整理 (三)
- ArrayList,LinkedList,Vector的关系和区别
- bush
- OVAL user guides (the object validation framework for Java)
- ASP.NET MVC 常见错误
- 多线程技术实现了一个简单的定时器类
- 生成SSL证书
- apache solr 安装
- 线程的终止与回收
- hdu 1082 Matrix Chain Multiplication--表达式求值