`
pzx888
  • 浏览: 13274 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java集合类

阅读更多
最近研究了下集合类的源码,在网上看了不少资料,把我认为比较好的文章,罗列一下。
HashMap http://www.ibm.com/developerworks/cn/java/j-lo-hash/
TreeMap http://www.ibm.com/developerworks/cn/java/j-lo-tree/
ArrayList http://www.cnblogs.com/hzmark/archive/2012/12/20/ArrayList.html
Vector http://blog.csdn.net/wankaiming/article/details/7655036
简单比较 http://www.cnblogs.com/hubingxu/archive/2012/02/21/2361281.html

java为数据结构中的映射定义了一个接口java.util.Map;它有四个主要实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap.
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。
Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
Hashtable与 HashMap类似,两者底层实现方式非常类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。
LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照访问次序排序。它通过在HashMap的实现机制上,增加维护一个双向链表,来保证遍历的次序。
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap的底层是一颗红黑树,平衡的排序二叉树,所以是有序的。
一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.

List接口的有几个主要实现,ArrayList、Vector、LinkedList
ArrayList和Vector功能类似。都是基于数组实现的,支持随机快速访问。
整体上ArrayList是Vector的“裸奔新版”
Vector从Java 1.0起就存在,ArrayList从Java 1.2起才存在,较新。
所以Vector在JavaME、Card等各种微小版本都可以使用,而ArrayList不能

ArrayList不具备线程同步的安全性,但速度较快,所以叫裸奔。
Vector具备线程安全。
另外就是底层数组在容量增长速度稍有不同,ArrayList是oldCapacity*3/2+1,Vertor是增加一个固定长度或者两倍。

LinkedList使用的是双向循环链表的数据结构,所以是没法实现随机访问的,只能顺序访问,这也正式它没有实现RandomAccess接口的原因;非线程安全。但是针对经常做非末尾插入的操作,LinkedList的性能要远高于ArrayList和Vector。

转载:说说JDK中的List-ArrayList、Vector、LinkedList http://www.cnblogs.com/lingiu/p/3252135.html



-------------------------------------------------------------------------------
Java集合框架
非常全面的一个描述http://baike.baidu.com/link?url=v8BSCfSgh42bFmjFoEC1OQ82HhUL0G02LJzS4Wz8MKtZBoMRTph2eTcYHdIZgRKdof4n0mPgCDd8-PwqjgYQq_
集合框架图-一目了然



学习心得,借鉴网上的分析资料,然后自己研读jdk相关源代码,可以有不错的收获。
  • 大小: 67.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics