您的位置:首页 > 编程语言 > Java开发

Java常用容器比较分析

2015-04-24 14:02 274 查看
容器是Java中的重要概念。容器中可以包含多个对象,每个对象作为容器中的一个元素。

继承实现关系图



通过上图可以分析出:

1)List和Set是Java.util中的两个接口,这两个接口分别继承于Collection。

2)ArrayList和LinkedList分别实现了List接口。

3)接口SortedMap实现了Map接口,TreeMap是具体类实现了SortedMap接口。

Collection:集合层次中的根接口,JDK没有提供这个接口的直接实现类。

Set:不能包含重复元素,SortedSet是一个按升序排列的元素的Set。

List是一个有序的集合,可以包含重复元素,提供了按索引访问的方式。

Map包含了Key-Value对,Map不能包含重复的Key,SortedMap是按照升序排列的Key的Map

ArrayList和LinkedList比较分析

1)ArrayList底层采用的是数组实现的。LinkedList的底层是采用双向链表实现的

2)对于删除插入操作,ArrayList中的元素要对应向前或向后移位,代价比较高。而LinkedList只要修改链接指向即可,代价比较小

3)当采用搜索操作时,采用ArrayList的比较好。LinkedList会涉及到指针移位的问题,操作起来比较麻烦。

HashSet和HashMap的关系

HashSet的底层是由HashMap实现的,当使用add方法向set中添加对象时,实际上是向底层Map的key值中添加元素,对应的value值放置的是一个Object对象,没什么作用。

HashMap的实现方式



当向HashMap中Put一个键值时,它会根据可以的hash值计算出一个位置。如果该位置还没有对象,就将对象插入到该位置。如果已经有对象存在了,就顺着Entry寻找next成员,如果链接上有对象的话,并和每个成员进行equals比较。结果为false,就将该对象放在数组中,把之前的对象链接在新插入对象的后面。

Hashtable与HashMap的比较分析

1)Hashtable是线程安全的,HashMap是线程不安全的,HashMap允许空(null)键值,因为是非线程安全的,在效率上可能高于Hashtable.

2)Hashtable中contains(Object value)和HashMap中的ContainsValue(Object value)功能相同

3)HashTable中hash数组默认大小是11,增加的方式是old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数

4)Hashtable继承于Dictionary,HashMap继承于AbstractMap
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: