Java 中的集合概述
集合是一个容器,用来存放引用类型的数据,在java.util包下。
Java中的集合主要有3种类型:
List接口:
是一个有序集合,可以放重复的数据。
Set接口:
是一个无序集合,不允许放重复的数据。
Map接口:
是一个无序集合,集合中包含一个键对象,一个值对象,键对象不允许重复,值对象可以重复。
Java中Collection集合的继承实现关系
Java中的Collection集合继承关系:
Iterable接口
此接口只有一个方法声明,此方法返回一个Iterator接口类型的实例。
Iterable接口声明:
Iterator接口:
此接口有三个方法申明。主要用于对集合的迭代。
Iterator接口声明:
Collection接口:
Collection接口很多方法声明。
Collection接口:
List接口:
有序并且元素可以重复,对于List集合,存储的顺序不会改变。存储在List集合中的元素可以重复,如一个String类型的对象可以存储多次。
Set接口:
无顺序并且元素不可重复,相同的对象只能存储一次并且存储的顺序和读取的顺序不一定相同。
SortedSet接口:
无序并且不可重复,另外主要的特点是自动根据大小或字典顺序排序。
ArrayList类:
Arraylist实现了List接口中的方法,同时ArrayList也继承了List接口的特点,存取原素有顺序并且元素可以重复。另外,需要注意的地方是ArrayList底层的实现是数组,所以对于ArrayList集合来说适合查询而不善于频繁的动态增删元素。因为数组根据数组的下标就可以提取相应的元素而不需要从头遍历整个数组中所有的元素,数组的这个特点使ArrayList更适合大量查询的场景。而数组的另一个特点是增删数据代价高,当增加或删除原素时,部分原素要进行移动,使性能下降。
LinkedList类:
LinkedList类实现了List接口中的方法,同时LinkedList也继承了List接口的特点,存取原素有顺序并且元素可以重复。另外需要注意的是LinkedList集合底层的实现是双向链表,所以LinkedList更适合频繁的增删操作,但是查询效率不如ArrayList集合,两种集合类型是互补的。
Vector类:
Vector集合底层的实现与ArrayList集合相同,都是数组的方式实现。另外,Vector集合是 线程安全 的,对于 多线程 集合操作适合Vector集合,如果ArrayList集合被多线程操作,同时增删集合中的数据那么读取的数据可能是错误的。但是Vector效率较低,使用较少。通常线程安全是在代码中控制,而不需要利用Vector中多线程安全而降低程序的效率。
HashSet类:
HashSet实现了Set接口并实现了Set接口中的方法,HashSet也同时继承了Set接口的特点,集合中的元素无序并且不可以重复,存储顺序和读取顺序不一定相同。HashSet底层的实现是 哈希表 数据结构。
TreeSet类:
TreeSet直接实现的接口是SortedSet接口,和HashSet相同是元素不可重复,但是集合中的元素会自动进行排序,根据大小或字典顺序。