提到集合之前,先说说数组Array和集合的区别:
- 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)
- JAVA集合可以存储和操作数目不固定的一组数据。
- 若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。
注意:使用相应的toArray()和Arrays.asList()方法可以相互转换。
Collection接口
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个 Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。
Set
Set接口继承Collection接口,它表示数学意义上的集合概念。Set中不允许集合中存在重复项,通过对象的equals()方法来检查同等属性,set中的元素是无序的。由于Set接口提供的数据结构是数学意义上集合概念的抽象,因此它需要支持对象的添加、删除,而不需提供随机访问。故Set接口与Collection的接口相同。
HashSet:使用HashMap的一个集的实现。虽然集定义成无序,但必须存在某种方法能相当高效地找到一个对象。使用一个HashMap对象实现集的存储和检索操作是在固定时间内实现的.
TreeSet: 在集中以升序对对象排序的集的实现。这意味着从一个TreeSet对象获得第一个迭代器将按升序提供对象。TreeSet类使用了一个TreeMap.
HashSet和TreeSet都实现Cloneable接口。为了能顺利进行,添加到TreeSet的元素必须是可排序的。
List
List接口继承了Collection 接口以定义一个<