Java集合类

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

[b]java为数据结构中的映射定义了一个接口java.util.Map;它有四个主要实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap.[/b]
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 可以实现,它还可以按读取顺序来排列.

[b]List接口的有几个主要实现,ArrayList、Vector、LinkedList[/b]
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 [url]http://www.cnblogs.com/lingiu/p/3252135.html[/url]


-------------------------------------------------------------------------------
[b]Java集合框架[/b]
非常全面的一个描述[url]http://baike.baidu.com/link?url=v8BSCfSgh42bFmjFoEC1OQ82HhUL0G02LJzS4Wz8MKtZBoMRTph2eTcYHdIZgRKdof4n0mPgCDd8-PwqjgYQq_[/url]
[b]集合框架图-一目了然[/b]
[img]http://dl2.iteye.com/upload/attachment/0093/8565/7421d1c2-baf7-3131-8e9a-884b493a4170.jpg[/img]


[b]学习心得,借鉴网上的分析资料,然后自己研读jdk相关源代码,可以有不错的收获。[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值