天天看点

Java 浅谈容器

一,Collection

Collection是一个接口,是一组独立的对象。它提供了一系列了方法(不包括从Object继承而来的方法)。它们也可通过Set或List执行所有的这些操作(List还有额外的功能),Map不是继承自Collection的,所以会另行介绍。

以下所讨论的容器均是继承自Collection。

1,List和Queue都是继承自Collection,比较简单,在这里不再介绍了。

2,Set容器

1),Set(interface) 存入Set的每个元素都必须是唯一的,因为Set不保存重复的元素。所以加入Set的元素必须定义equals()方法以确保对象的一致性。

2),HashSet 为快速查找而设计的Set,其底层是hashtable(哈希表),所以存入的元素必须定义hashCode()。

3),TreeSet 保持次序的Set,底层是树结构。使用它可以从Set中提取有序的序列。元素必须实现Comparable接口。

4),LinkedHashSet 具有HashSet的查询速度,且内部使用链接维护元素的顺序(插入的次序)。元素也必须定义hashCode()方法。

二,Map

映射表的基本思想是维护键值关联,因此,你可以使用键来查找值。标准的Java类库包含了Map的几种基本思想,包括:HashMap、TreeMap、LinkedHashMap、WeakHashMap、ConcurrentHashMap、IdentityHashMap。它们都有同样的基本接口Map,但是行为特性各不相同,这表现在效率、键值对的保存及呈现的次序、对象的保存周期、映射表如何在多线程程序中工作和判定“键”等价的策略等方面。

1),HashMap 使用了散列码,提高了HashMap的速度。

2),LinkedHashMap 底层是hashtable,为了提高速度LinkedHashMap散列化了所有的元素,但是在遍历的时候,却又以元素的插入顺序返回键值对。在其构造器内可以设置使之采用基于访问的最近最少使用算法,于是没有被访问的元素就会出现队列前面。对于需要定期清理元素以节省空间的程序来说是相当方便的。

3),TreeMap 基于红黑树的实现。查看”键“或”键值对“时,它们会被排序(次序由Comparable或Comparator决定)。TreeMap的特点在于,所得到的结果都是排序的。TreeMap是唯一带有subMap()方法的Map,它可以返回一个子树。

4),WeakHashMap 弱键映射,允许释放映射所指向的对象。

5),ConcurrentHashMap 一种线程安全的Map,它不涉及同步加锁。

6),IdentityHashMap 使用==代替equals()对”键“进行比较散列映射,专为解决特殊问题而设计的。

三,Collections

区别于Collection,提供了大量用于容器的卓越使用方法,详细可以查看JDK。