先来一张集合概要图:
PS:有序是指元素按照添加时候的顺序排列。
Collection 接口
Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。
List 接口
List接口是有序的集合,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素和空元素。
-
ArrayList
是以一种类似数组的形式进行存储,因此它的随机访问速度极快,能在遍历和随机访问时提供更好的性能。该类是非同步的,在多线程环境下需要自己手动管理线程的同步问题。 -
LinkedList
是以一种基于链表数据结构的集合类,适用于需要进行频繁的插入、删除操作的数据集。该类是非同步的,可以通过List list = Collections.synchronizedList(new LinkedList(...))构造一个同步的List集合。
PS:Collections是一个很好用的集合工具类哦。
Set接口
Set 接口是无序的集合(PS:准确的说是绝大部分Set是无序的),Set 不保存重复的元素。
-
HashSet
该类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个,并且存放到HashSet中的对象需要实现hashCode()方法。 -
TreeSet
该类实现了Set接口,将放入其中的元素按序排放,可以实现排序等功能,这就要求你放入其中的对象是可排序的,需要使用到集合框架提供的另外两个实用类Comparable和Comparator。
Map接口
Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。
-
HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。该类根据键的hashcode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。 -
TreeMap
该类继承自AbstractMap,将放入其中的元素对键按序排放。