标签:
(照着jdk api 用visio 自己画了下面两张图,图片有些凌乱或可能有错误)
核心的集合接口封装了不同类型的集合。如下图所示:
核心集合接口
所有的核心接口都是泛型的,比如Collection接口:
public interface Collection<E>
<E>说明声明实例的时候需要指明对象类型,这样编译器就可以在编译期进行一个类型检查,减少运行时错误。
Set
特点:集合中的元素不能重复。
一个不包含重复元素的集合。这个接口对数学中的集合的抽象概念进行了建模。
HashSet是最快的获取元素方式,存储的顺序看起来并无实际意义;
TreeSet按照比较的结果升序保存对象;元素有序
LinkedHashSet按照被添加的顺序保存对象。
List
特点:按对象进入的顺序保存对象,可以保存重复的对象。
List定义一个有顺序的集合,有时也被称作一个序列(sequence)。List可以包含重复的元素。
ArrayList,它长于随机访问元素,但是在List的中间插入和删除元素时较慢。
LinkedList,它在随机访问方面相对比较慢,但是它进行插入和删除代价较低。
》 ArrayList、Vector和LinkedList的区别
1)三者都是可伸缩数组,即可动态改变长度的数组
2)ArrayList和Vector基于存储元素的Object[]array来实现,LinkedList采用双向列表来实现
3)ArrayList、LinkedList 不是线程安全,Vector 的大部分方法直接或间接同步,所以线程安全。
Queue
通常,Queue中的元素都是按照FIFO (first-in-first-out)的方式,但是这不是必须的。一些优先级队列元素,按照它们的值排列。但是不管使用了什么排序方式,调用remove或poll方法时,移除的都是队列头元素。在FIFO队列中,新元素总是被插在队尾,但是其他类型的队列可能会使用不同的排列方式。
Map
特点:保存键值对,键是唯一的不能重复,值可以重复。
Map中存储的是键值对的映射。一个Map不能包含重复的key,一个key可以对应至多一个值。 SortedSet和SortedMap 还有两个核心的接口是排序版本的Set和Map:SortedSet和SortedMap。SortedSet的元素是按照升序排列的,SortedMap是按照键的升序排列键值对的。
HashMap提供了最快的查找技术,也没有按照任何明显的顺序来保存其元素。基于散列表实现的,可以采用对象的hashcode进行快速排序
TreeMap按照比较结果的升序保存键。基于红黑树的数据结构,内部元素按需排列。
LinkedHashMap则按照插入顺序保存键,同时还保留了HashMap的查询速度。采用列表来维护内部的顺序。
表格对比:
ps:内容较多,慢慢整理
参考引用:
[1] Java 容器集合框架概览 http://www.cnblogs.com/mengdd/archive/2013/01/19/2868095.html
标签:
原文地址:http://www.cnblogs.com/xiaotangai/p/5109586.html