广义而言,数组也可以看作是一种“集合”-使用数组可以实现数据的批量组织操作功能。但数组并不能满足所有方面的需要,比如当集合中数据的数目不定,且频繁增减时,或者需要以“指定元素下标”以外的更灵活方式检索集合元素时,使用数组实现会很烦琐。从体系上来讲,集合类型可以归纳为三种:集,列表和映射。
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
集(Set)对应了数学上“集合”的概念,是最简单的一种集合,Set集合的重要特性是:
1.Set集合中不区分元素的顺序(当然也就不记录元素的加入顺序)
2.Set集合中不允许出现重复元素。这里所谓的“重复元素”是指按照equals()方法判断为等价的对象。
API中解释
Set是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。
列表(List)的基本特征是将元素以线性方式存储,相当于数据结构中的“线性表”,具体表现为数组和向量,链表,栈,队列等。和Set集合对应,
1.List集合区分元素的顺序(记录元素的加入顺序)
2.List集合允许包含重复元素。
API中解释
List有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。更确切地讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。
映射(Map)与集或列表的区别较明显,映射中保存成对的“键-值”信息。Map中存储的每个元素都包括起标识作用的“键”和元素“值”两部分,检索数据时必须提供相应的“键”,才能查找到其所映射的“值”,因此Map集合中不能包含重复的“键”,而且每个“键”最多只能映射一个“值”。
由上图可以看出Set和List是Collection的子接口。而Map与Collection没有一点联系,Map是一级接口。