一、概述
- Java集合框架由Java类库的一系列接口、抽象类以及具体实现类组成。 Java集合框架为我们提供了一组基本机制以及这些机制的参考实现,其中基本的集合接口是Collection接口,其他相关的接口还有Iterator接口、Map接口等。这些集合框架中的接口定义了一个集合类型应该实现的基本机制,Java类库为我们提供了一些具体集合类型的参考实现,根据对数据组织及使用的不同需求,只需要实现不同的接口即可。Java类库还为我们提供了一些抽象类,提供了集合类型功能的部分实现,我们也可以在这个基础上去进一步实现自己的集合类型。
二、 Collection接口
(1)Collection接口
- Collection接口是集合层级结构的根接口。一个集合代表了一组对象,这组对象被称为集合的元素。一些集合允许重复的元素而其他不允许;一些是有序的而一些是无序的。Java类库中并未提供任何对这个接口的直接实现,而是提供了对于它的更具体的子接口的实现。
- Collection接口的直接子接口主要有三个:List接口、Set接口和Queue接口。
(2)List接口
- List是一个有序的集合类型。使用List接口可以精确控制每个元素被插入的位置,并且可以通过元素在列表中的索引来访问它。列表允许重复的元素,并且在允许null元素的情况下也允许多个null元素。
- List接口支持两种访问元素的方式:使用列表迭代器顺序访问或者使用get/set方法随机访问。
1.ArrayList<E>
类
- ArrayList
<E>
是一个可动态调整大小的数组,允许null类型的元素。Java中的数组大小在初始化时就必须确定下来,而且一旦确定就不能改变,在很多场景下不够灵活。ArrayList<E>
解决了这个问题,当我们需要一个能根据包含元素的多少来动态收缩伸张的数组时,那么ArrayList<E>
正是我们所需要的。 - ArrayList
<E>
类访问速度快。
2.LinkedList类
- LinkedList类代表了一个双向链表,允许null元素。这个类同ArrayList一样,不是线程安全的。
- LinkedList类写入速度快
(3)Set接口
- Set接口与List接口的重要区别就是它不支持重复的元素,之多可以包含一个null类型元素。Set接口定义的是数学意义上的“集合”概念。
- Set接口并没有显式要求其中的元素是有序或是无序的,它有一个叫做SortedSet的子接口,这个接口可以用来实现对Set元素的排序。
1.HashSet
- HashSet使用的是相当复杂的方式来存储元素的,使用HashSet能够最快的获取集合中的元素,效率非常高。
- 不能存放同以对象。
2.TreeSet
- TreeSet也不能存放重复对象,但是TreeSet会自动排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。排序规则包括自然排序和客户排序。
- ①自然排序:TreeSet要添加哪个对象就在哪个对象类上面实现java.lang.Comparable接口,并且重写comparaTo()方法,返回0则表示是同一个对象,否则为不同对象。
②客户排序:建立一个第三方类并实现java.util.Comparator接口。并重写方法。定义集合形式为TreeSet ts = new TreeSet(new 第三方类());
(4)Queue接口
- Queue接口是对队列这种数据结构的抽象。一般的队列实现允许我们高效的在队尾添加元素,在队列头部删除元素(First in, First out)。
- Queue
<E>
接口还有一个名为Deque的子接口,它允许我们高效的在队头或队尾添加/删除元素,实现了Deque<E>
的接口的集合类即为双端队列的一种实现(比如LinkedList就实现了Deque接口)。
三、Map接口
- 一个把键(key)映射到值(值)的对象被称作一个Map(映射表)对象。映射表不能包含重复的键,每个键至多可以与一个值关联。Map接口提供了三个集合视图:键的集合视图、值的集合视图以及键值对的集合视图。一个映射表的顺序取决于它的集合视图的迭代器返回元素的顺序。一些Map接口的具体实现(比如TreeMap)保证元素有一定的顺序,其它一些实现(比如HashMap)则不保证元素在其内部有序。
(1)HashMap
- HashMap
<K, V>
是基于哈希表这个数据结构的Map接口具体实现,允许null键和null值。这个类与HashTable近似等价,区别在于HashMap不是线程安全的并且允许null键和null值。由于基于哈希表实现,所以HashMap内部的元素是无序的。
(2)TreeMap
- TreeMap
四、Iterator接口
- Iterator接口也是Java集合框架的成员,但它与Collection系列、Map系列的集合不一样:Collection系列集合、Map系列集合主要用于盛装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。