集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。
看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢?
首先,数组的大小是固定的,而集合理论上大小是不限的。
其次,数组既可以存储基本数据类型的数据,也可以存储引用类型的数据,而集合只能存储引用类型的数据
下面来一张集合各个类的关系图(此图来自百度搜索):
上面的图是集合类家族的主要成员们。
该图有一个小错误,里面的Hashtable写成了HashTable。它是java1.0版本的并没有按照java的命名规范来进行命名。
collection是所有集合的父类接口,
具有增{add(),addAll(),},删{remove(),removeAll(),clear()},查{contains(),containsAll(),isEmpty(),size()},取交集retainAll(),遍历iterator(),哈希码hasCode(),比较equals(),
1、List:元素是有序的,可以重复的。因为该集合体系有索引。
(1)ArrayList:底层是数组结构。java1.2版本,线程不同步。查找很快,增删稍慢慢
(2)LinkedList:底层是链式数据结构。查找很慢,增删很快
(3)Vector:底层同ArrayList,java1.0版本,线程是同步的。被ArrayList替代了。增删改查都很慢。
2、Set:元素是无序的,不可以重复的。
(1)HashSet:由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。
(2)TreeSet:底层的数据结构是二叉树。
3、Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值。
(1)HashMap:基于哈希表的 Map 接口的实现。
(2)TreeMap:基于红黑树(Red-Black tree)的 NavigableMap
实现。