回忆java来时路-第六章 集合类的演进

记得早期的java开发者经常使用的集合类是vector和hashtable,它们都是线程安全的,由于同步会消耗资源,因此他们的执行速度要稍慢。很多情况下我们使用集合类并不需要保证线程安全的特性,因此后来又出现了对应的非线程安全的版本ArrayList和HashMap。后来随着concurrent包的加入,又发展出来ConcurrentHashMap等集合类,使我们有了更多的选择,当然性能和安全性上得到综合提高。
1) 先来看看集合类的继承关系树
     从这个图中可以看出,Set和List都继承自共同的Collection接口
     Vector是List的子类
     Map是独立于Collection的接口,也就是说它不支持Collection的一些集合操作(比如iterator)
     
2)然后我们来看看一些具体子类的特性
Map:是一种key-value的健值数据结构
     HashMap:按hash算法存储和访问的map结构,插入和查询速度较快
     TreeMap:保证元素有序存储的map结构,速度上比Hashmap慢点
     Hashtable:线程安全的map实现,因此速度会较慢
     ConcurrentHashMap:并发专用的hashmap,即线程安全,速度也较Hashtable快
List:里面的元素可以重复。
     ArrayList:随机访问和存储,插入相对比较慢,查询相对比较快
     LinkedList:链表结构的存储和访问,插入比较快,查询比较慢
     Vector:和ArrayList类似,不过是线程安全的,效率更低点。
Set:里面的元素都具有唯一性,不会有相同的元素。
     HashSet:内部是通过HashMap来存储和访问,不保证有顺,源代码中map是实际存储的容器。     
     TreeSet:内部是通过NavigableMap来实现,和TreeMap类似,保证存储元素是有序的 

3)各个集合类的访问、插入、自动扩容、缩容。
     Vector、ArrayList、HashSet、HashMap都可自动扩容,当已使用的空间超过全部空间的一定比例时,就申请扩大一倍的空间来存储,此时会有copy迁移元素到新位置的工作。
     TreeMap,TreeSet,linkedSet,linkedHashMap这些因为不需要事先有个固定的容量,也就不存在所谓扩容问题,都是按需增加。
     Vector、ArrayList都是可以通过下标随机访问,而linked的要通过链表遍历查找来访问。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值