集合之间的差别

本文介绍了线程安全和非安全的集合对象,如线程安全的Vector、HashTable等,非安全的ArrayList、HashMap等。还对相关集合对象进行比较,包括Vector、ArrayList、LinkedList的性能、同步和数据增长情况,以及HashMap、HashTable、HashSet的区别。

线程安全的集合对象:Vector、HashTable、StringBuffer

线程非安全的集合对象:ArrayList、LinkedList、HashMap、HashSet、StringBulider、TreeSet

相关集合对象比较:

       1.Vector、ArrayList、LinkedList

                Vector:和ArrayList都是通过数组进行实现,不同的是它支持线程的同步,某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢

                ArrayList:当需要在此集合中添加、删除、修改数据时耗费时间比较长,需要移动数组中全部数据的位置,代价太大,但是如果在此集合中查询数据就比较快,通过数组下标进行数据查询,数组本来就有下标,所有查询起来比较快

               LinkedList:此集合不适合查询,查询数据需要对集合中的数据进行下标定义,再进行查询,效率低;但对于集合中的数据进行增、删、改效率快,只有把要改变的数据两旁的数据

     2、Vector和ArrayList比较:

               性能:

                     ArrayList底层数据结构是数组,适合随机查找和遍历,不适合插入和删除,线程不安全,效率高。。LinkedList底层数据结构是链表, 适合数据的动态插入和删除,随机访问和遍历速度比较慢,线程不安全,效率高

               同步:

                    Vectors是可同步的,是线程安全的。ArrayList是不可同步的,不是线程安全的。所以,一般单线程推荐用ArrayList,多线程中则用Vector 

             数据增长:

                      往一个ArrayList或者Vector里插入一个元素时,如果内部数组空间不够,ArrayList或Vector会扩展它的大小。Vector在默认情况下增长一倍的大小,而ArrayList增加50%的大小

       3、HashMap\HashTable\HashSet区别

           1.HashMap                 
                      a. 采用数组方式存储key-value构成的Entry对象,无容量限制;
                      b. 基于key hash查找Entry对象存放到数组的位置,对于hash冲突采用链表的方式去解决;
                      c. 在插入元素时,可能会扩大数组的容量,在扩大容量时须要重新计算hash,并复制对象到新的数组中;
                      d. 是非线程安全的;
                      e. 遍历使用的是Iterator迭代器;

          2、HashTable:
                      a. 是线程安全的;
                      b. 无论是key还是value都不允许有null值的存在;在HashTable中调用Put方法时,如果key为null,直接抛出NullPointerException异常;
                      c. 遍历使用的是Enumeration列举;

        3、HashSet:
                      a. 基于HashMap实现,无容量限制;
                      b. 是非线程安全的;
                      c. 不保证数据的有序

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值