最近研究了下集合类的源码,在网上看了不少资料,把我认为比较好的文章,罗列一下。
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
分享到:
相关推荐
Java 集合排序 及java集合类 详解.pdf
set list ArrayList等java集合类详述
第13讲 JAVA集合类.ppt第13讲 JAVA集合类.ppt第13讲 JAVA集合类.ppt第13讲 JAVA集合类.ppt第13讲 JAVA集合类.ppt
一张图让你看清Java集合类 所有精华 集于一图 一目了然 形象易懂 十分中肯 绝对干货!
java集合类学习笔记.doc 学习java集合时留下的宝贵知识
java集合类类性能测试源代码
java集合类java集合类java集合类java集合类java集合类java集合类java集合类java集合类java集合类java集合类
大公司最喜欢问的Java集合类面试题,找工作有帮助
java的各种集合类的总结,以及实例讲解。
Java 集合排序及java 集合类详解 Java 集合排序及java 集合类详解,Java里面最重要、最常用也就是集合那部分了,能够用好集合和理解好集合对于做Java程序的开发拥有无比的好处。本教程详细解释了关于Java中的集合是...
Java集合排序及java集合类详解,对list,set,map等java集合进行详细讲解
Java集合类,在图片上体现出来,为了更好的描述,本来是博客里的,不好往博客里插,所以单独弄出来了。
集合类的框架为集合的实现者提供了大量的接口和抽象类,并对其中的某些机制给予了描述,例如,Iterator(迭代协议)。实现Comparable接口或Comparator接口,用户可以根据需要对集合中的元素进行排序。为了方便用户...
java集合类线程安全 写的不错,短小精悍,值得一读
Java集合类性能分析 Collection List Map Set
Java集合类层次结构Java集合类层次结构Java集合类层次结构Java集合类层次结构Java集合类层次结构Java集合类层次结构
java集合类面试题总结
今天在网上搜索了一下,发现一篇关于java集合的博文,里面整理得非常好, 特意copy过来和大家分享一下