第一章 集合概述
我们知道在集合的框架的继承树中,最顶层有两个接口,分别是Collection和Map.
Collection表示一组纯数据,而Map则表示一组键值对
Collection是最基本的集合接口,一个Collection代表一组对象,也就是Collection的元素.JDK不提供直接继承自Collection的类,JDK提供的类都是继承自Collection的子接口,比如说List和Set.
所有实现Collection接口的类都必须提供两个标准的构造函数,无参构造和有参构造,无参构造用于创建一个空的Collection,有参构造用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素.
第二章 Collection接口的介绍
1 Collection接口下有三个子接口,分别是List,Set和Queue
2 List接口:List接口中有ArrayList,LinkedList,Vector,和Stack.我们用的比较多的是ArrayList和LinkedList,这两者的区别很明显,从名字上就能看出来.ArrayList底层通过数组实现,所以其随机访问速度比较快,但是对于频繁的增删的情况,效率就比较低了,而LinkedList,底层是通过链表来实现的,所以增删比较快,但是对于随机访效率比较低.至于Vector,他是ArrayList的线程安全版本,说到线程安全,大家估计机会想到,他的执行效率低.Stack则对应栈数据结构,Vector和Stack使用的很少,在这就不多说了
3 Set接口:Set接口表示数学意义上的集合概念.Set中不包含重复的元素,即Set中不存在两个这样的元素,使得a.equals(b)为true.由于Set接口提供数据结构是数学意义上的集合概念,因此他需要支持对象的添加,删除,而不需要提供随机访问.元素加入Set之前需要先执行hashCode()方法,如果值已经在集合中存在,则要继续执行equals()方法,如果equals方法返回的结果也为真,则证明该元素已经存在,新元素就会把旧元素覆盖.如果hashCode()返回的值不同,则直接加入集合.这里请记住一点,对于Set集合中的元素,hashCode值不同的元素一定不相等,但是不相等的元素,hashCode值可能相同.
3.1.1.1 说完Set集合的一般特性后,再来说一下Set接口下的几个子类,Set接口下有HashSet,LinkedHashSet和TreeSet.HashSet和LinkedHshSet的区别是LinkedHashSet的输出顺序和输入顺序是一致的,而HashSet则不然,对于TreeSet,默认情况下是按照字符的自然顺序进行升序排列的
4 List和Set的区别
4.1.1.1 其实他们的区别很简单,就是List在添加元素的时候,不执行额外的操作,并且可以重复,而Set在添加元素的时候需要执行hashCode方法等一系列的判断, 一句话就是List集合有序可重复,Set集合无序唯一
4.1.1.2 Set集合检索效率低,删除和插入效率高,插入和删除不会引起元素位置的变化;List集合和数组类似,List集合可以动态增长,查找元素效率高,删除和插入效率低,因为会引起元素位置的变化
5 Collection集合的遍历
常见的集合遍历方式有以下四种: