常用集合类的结构如下图
集合框架
集合的两个顶级接口分别为:单列集合Collection 和 双列集合Map
单列集合(Collection)和双列集合(Map)特点如下
一、Collection:单列集合类的根接口,有两个重要的子接口,即 List 和 Set
List 接口特点是元素有序、元素可重复,主要实现类有 ArrayList、LinkedList、Vector
- ArrayList :线程不安全的,对元素的查询速度快。
- LinkedList :链表结构,对元素的增删速度很快。
- Vector :线程安全的,多了一种取出元素的方式:枚举(Enumeration),但已被ArrayList取代
Set 接口特点是元素无序并且不可重复,主要实现类有 HashSet 和 TreeSet
- HashSet:要保证元素唯一性,需要覆盖掉Object中的equals和hashCode方法(因为底层是通过这两个方法来判断两个元素是否是同一个)。
- TreeSet:以二叉树的结构对元素进行存储,可以对元素进行排序,排序的两种方式:
- 第一种方式:元素自身具备比较功能,元素实现Comparable接口,覆盖compareTo方法。
- 第二种方式:建立一个比较器对象,该对象实现Comparator接口,覆盖compare方法,并将该对象作为参数传给TreeSet的构造函数(可以用匿名内部类)。
二、Map:双列集合类的根接口,用于存储具有键(Key)、值(Value)映射关系的元素,主要实现类有 HashMap、Hashtable、TreeMap
- HashMap:线程不安全等的,允许存放null键null值
- Hashtable:线程安全的,不允许存放null键null值
- TreeMap:可以对键进行排序(要实现排序方法同TreeSet)
三、Collection和Map两个接口对元素操作的区别:
- 存入元素: Collection接口下的实现类通过add方法来完成,而Map下是通过put方法来完成
- 取出元素:
- 在Collection接口下:
- List接口有两种方式:1、get(脚标);2、通过Iterator迭代方式获取元素;
- Vactor多了一种枚举(Enumeration)的方式
- Set接口通过迭代的方式获取元素。
- 在Map接口下:
- 先通地keySet获取键的系列,然后通过该系列使用Iterator迭代方式获取元素值。
- 在Collection接口下:
集合框架详细图如下
单列集合类的继承体系图如下:
双列集合类的继承体系图如下:
其中,如上两图中的绿色的虚线代表实现,绿色实线代表接口之间的继承,蓝色实线代表类之间的继承。