关于java.util.Vector 或 java.util.Hashtable类过期的讨论

某些高级IDE在检测代码成熟问题时,会报告集合是否过期的问题。目前过期的集合类有两个java.util.Vector 和 java.util.Hashtable 。java

Vector的api描述是:从jdk 1.2版本开始,该类被修正为实现List接口,并成为Java Collection集合框架的一员,区别于其余一些新的集合实现类,Vector是线程安全的。若是是一个线程安全的实现,推荐使用ArrayList代替Vector。编程

Hashtable的api描述是:从jdk 1.2版本开始,该类被修正为实现List接口,并成为Java Collection集合框架的一员,区别于其余一些新的集合实现类,Hashtable是线程安全的。若是是一个线程安全的实现,推荐使用HashMap代替Hashtable。若是是高并发的线程安全的实现,推荐使用ConcurrentHashMap代替Hashtable。api

Vector和ArrayList区别 
Vector和ArrayList Vector和ArrayList在使用上很是类似,均可用来表示一组数量可变的对象应用的集合,而且能够随机地访问其中的元素。  
Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,因为线程的同步必然要影响性能,所以,ArrayList的性能比Vector好。 
当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增长50%的大小,这样,ArrayList就有利于节约内存空间。数组

 
Hashtable和HashMap区别
Hashtable和HashMap它们的性能方面的比较相似 Vector和ArrayList,好比Hashtable的方法是同步的,而HashMap的不是。安全

 
ArrayList和LinkedList区别
对于处理一列数据项,Java提供了两个类ArrayList和LinkedList,ArrayList的内部实现是基于内部数组Object[],因此从概念上讲,它更象数组,但LinkedList的内部实现是基于一组链接的记录,因此,它更象一个链表结构,因此,它们在性能上有很大的差异。  
从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的全部数据相应的后移,这样必然要花费较多时间,因此,当你的操做是在一列数据的后面添加数据而不是在前面或中间,而且须要随机地访问其中的元素时,使用ArrayList会提供比较好的性能 
而访问链表中的某个元素时,就必须从链表的一端开始沿着链接方向一个一个元素地去查找,直到找到所需的元素为止,因此,当你的操做是在一列数据的前面或中间添加或删除数据,而且按照顺序访问其中的元素时,就应该使用LinkedList了。  
若是在编程中,1,2两种情形交替出现,这时,你能够考虑使用List这样的通用接口,而不用关心具体的实现,在具体的情形下,它的性能由具体的实现来保证。 并发


配置集合类的初始大小  
在Java集合框架中的大部分类的大小是能够随着元素个数的增长而相应的增长的,咱们彷佛不用关心它的初始大小,但若是咱们考虑类的性能问题时,就必定要考虑尽量地设置好集合对象的初始大小,这将大大提升代码的性能。 
好比,Hashtable缺省的初始大小为101,载入因子为0.75,即若是其中的元素个数超过75个,它就必须增长大小并从新组织元素,因此,若是你知道在建立一个新的Hashtable对象时就知道元素的确切数目如为110,那么,就应将其初始大小设为110/0.75=148,这样,就能够避免从新组织内存并增长大小。框架

相关文章
相关标签/搜索