collection
||---List 列表
特点:
1,有序(存储元素的顺序和取出元素的顺序一致)
2,该集合中的元素都有索引,所以可以通过索引(角标) 来访问元素
3,它可以存储重复元素
常见子类对象:记住:具体的子类对象,我们要学习应该是该对象的特有的数据结 构,以及相关的特点
||-----Vector:jdk1.0 就存在了 底层是数组结构. 可变长度数组
原理:一旦元数组长度不够,会创建新数组,将原数组的元素 复制到新数组中,并将新元素添加到新数组中.
Vector 是同步的
||-----ArrayList:底层是数组结构,也是支持长度可变数组的.是不同步 的.替代了Vector.因为效率高.查询效率很高. 但是增删效率慢
||-----LinkedList:底层是链接列表结构,简称链表结构. 是不同步的 这个结构的好处:对元素的增删非常效率高,查询非常慢
|---Set: 集: 中的方法和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,都属于List体系,通常也是非同步的
如果后缀是Set,都属于Set体系,通常也是非同步的
这些体系中的其它子类对象,后缀不是所属接口名的,一般都是同步的 比如Vector
这在常用子类对象中通用
明确数据结构
对于jdk1.2版本的子类对象
后缀名是所属的体系
前缀名是技术数据结构的名称
比如:
ArrayList:看到Array,就要明确是数组结构.查询快
LinkedList:看到Link,就要明确链表结构,就要想到add get remove和first last
结合的方法,增删快.
HashSet:看到hash,就要明确是哈希表.查询快,而且唯一性
就要想到元素必须覆盖hashCode方法和equals方法
TreeSet:看到Tree,就要明确是二叉树,可以对元素排序
就要想到两种排序方式
自然排序:Comparable接口.覆盖compareTo(一个参数)java.lang
比较器:Comparator接口.覆盖compare(两个参数);java.util
判断元素唯一性的依据就是比较方法的返回结果return 0;
|
|