长沙企业建站程序,建设项目技术服务网站,Wordpress托管 点点,室内设计学校排名榜在写java的时候#xff0c;基本上都喜欢用arraylist#xff0c;甚至我都不知道有个vector的存在。查了一下发现又是线程安全问题。。。咋个线程安全天天围着我转呢。。。多得阿里巴巴#xff0c;让我开始认识java的所谓线程安全问题。 the following is from#xff1a;htt…在写java的时候基本上都喜欢用arraylist甚至我都不知道有个vector的存在。查了一下发现又是线程安全问题。。。咋个线程安全天天围着我转呢。。。多得阿里巴巴让我开始认识java的所谓线程安全问题。 the following is fromhttp://blessed24.javaeye.com/blog/751336 1. Vector ArrayList 1 Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe)而ArrayList的方法不是由于线程的同步必然要影响性能因此,ArrayList的性能比Vector好。 2 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小这样,ArrayList就有利于节约内存空间。 2. Hashtable HashMap Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList比如Hashtable的方法是同步的,而HashMap的不是。 3. ArrayList LinkedList ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组但LinkedList的内部实现是基于一组连接的记录所以它更象一个链表结构所以它们在性能上有很大的差别 从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止所以,当你的操作是在一列数据的前面或中间添加或删除数据并且按照顺序访问其中的元素时就应该使用LinkedList了。 如果在编程中1、2两种情形交替出现,这时,你可以考虑使用List这样的通用接口,而不用关心具体的实现在具体的情形下,它的性能由具体的实现来保证。 4. 配置集合类的初始大小 在Java集合框架中的大部分类的大小是可以随着元素个数的增加而相应的增加的我们似乎不用关心它的初始大小,但如果我们考虑类的性能问题时,就一定要考虑尽可能地设置好集合对象的初始大小,这将大大提高代码的性能。 比如,Hashtable缺省的初始大小为101,载入因子为0.75,即如果其中的元素个数超过75个,它就必须增加大小并重新组织元素所以,如果你知道在创建一个新的Hashtable对象时就知道元素的确切数目如为110,那么,就应将其初始大小设为110/0.75148,这样,就可以避免重新组织内存并增加大小。转载于:https://www.cnblogs.com/plmnko/archive/2010/10/10/1847362.html