Collection
List(列表)
特色:
算法
1,有序(存储元素的顺序和取出元素的顺序一致)数组
2,该集合中的元素都有索引,因此能够经过索引(角标)来访问元素。
3,它可以存储重复元素。 数据结构
常见子类对象:记住:具体的子类对象,咱们要学习应该是该对象的特有的数据结构,以及相关的特色。
Vector:jdk1.0就存在了,底层是数组结构的,可变长度数组。原理:一旦原数组长度不够,会建立新数组将原数组的元素复制到新数组中,并将新元素添加到新数组中。Vector是同步的。
ArrayList:底层是数组结构,也是支持长度可变数组的,是不一样步的。替代了Vector.由于效率高。 查询效率很高。 可是增删的效率很低。学习
LinkedList:底层是连接列表结构,简称链表结构。是不一样步的。这个中结构的好处:对元素的增删很是效很高。 查询的效率很低。spa
Set(集)orm
中的方法和Collection一致,只要重点注意它的子类对象便可。取出元素只能使用迭代器。
特色:
1,不可包含重复元素。(最大的特色)
2,这个集合存入元素的顺序和取出元素的顺序不必定一致。(具体的容器对象数据结构不一样,顺序也有不一样)对象
HashSet:底层数据结构是哈希表,不保证顺序,是不一样步的。排序
哈希表:提供数组的查询效率而出现的。索引
将要存储的元素先经过哈希算法算出一个哈希值来标识存储的位置,表明着元素。要找元素时,先该元素经过哈希算法算出哈希值,在经过哈希值到哈希表中去查找。接口
特色:
1,不关系元素的顺序。
2,提升了查询效率。
3,不可能出现重复元素,由于哈希值都不一样。即便相同,会再次判断两个元素的equals,内容是否相同。
若是内容也相同,不存,若是内容不一样,存储。
因此哈希表要保证元素的惟一性,必需要依赖于两个方法。
1,hashCode
2,equals
TreeSet:能够给Set集合中的元素进行指定顺序的排序,非同步的。 默认状况下,是经过元素的天然顺序的序。它保证元素惟一性的依据是看比较方法的返回结果是不是0.是0.就视为元素相同。不存。
TreeSet排序的方式一:让元素自身具有比较性,须要实现Comparable接口,覆盖compareTo方法。
这种比较方式成为天然顺序排序。
若是元素自身不具有比较性或者具有的比较性(天然顺序)不是所须要的,这时只能用第二种方式 。
TreeSet排序的方式二:让容器自身具有比较性。容器一初始化就具有了比较功能。由于容器时在对构造时完成的。经过查阅,有一个构造方法TreeSet(Comparator),在容器初始化时能够指定一个比较 器。 须要实现Comparator接口,覆盖compare方法便可。因此这种方式成为比较器排序。
如抉择:
当存入的的对象有重复时,用List,没有重复元素时,用Set。