集合的特点:
1、用于存储对象的容器
* 2、集合的长度是可变的
* 3、集合中不可以存储基本数据类型值
*
*
* Collection
* |---List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复
* |--Vector:内部是数组数据结构,是同步的,增删,查询都很慢!
* |--ArrayList:内部是数组数据结构,是不同步的,替代了Vector,查询的速度快
* |--LinkedList:内部是链表数据结构,是不同步的 ,增删元素的速度快
* 既然是增删快,那个对应的方法是addFirst,addLast...
* |---Set:元素不能重复,无序。(Set接口中的方法和Collection一致)
|--HashSet:内部是哈希表数据结构,是不同步的
如何保证元素唯一性的呢? 由hashCode()和equals()保证的
如果对象的hashCode值不同,那就不用判断equals方法,就直接存储到哈希表中
如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true
如果 为true,即视为相同元素,不存,如果为false,那么视为不同元素,就进行存储
|--TreeSet:可以对Set集合中的元素进行排序,是不同步的
TreeSet对元素进行排序的方式之一:
让元素自身具备比较功能,就需要实现Comparable接口,覆盖compareTo方法
可以使用TreeSet集合使用第二种排序方式之二:( 如果不要按照对象中具备的自然顺序进行排序)
让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法,
讲该类对象作为参数传递给TreeSet集合的构造方法
* List:特有的常见方法:有一个共性特点就是都可以操作角标
Collection集合总结
Collection
|--List 有序,可重复
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高
|--Set 无序,唯一
|--HashSet
底层数据结构是哈希表。
如何保证元素唯一性的呢?
依赖两个方法:hashCode()和equals()
开发中自动生成这两个方法即可
|--LinkedHashSet
底层数据结构是链表和哈希表
由链表保证元素有序
由哈希表保证元素唯一
|--TreeSet
底层数据结构是红黑树。
如何保证元素排序的呢?
自然排序 对象实现Comparable接口
比较器排序 集合实现Compartor接口
如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定
针对Collection集合我们到底使用谁呢?
唯一吗?
是:Set
排序吗?
是:TreeSet
否:HashSet
如果你知道是Set,但是不知道是哪个Set,就用HashSet。
否:List
要安全吗?
是:Vector
否:ArrayList或者LinkedList
查询多:ArrayList
增删多:LinkedList
如果你知道是List,但是不知道是哪个List,就用ArrayList。
如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。
如果你知道用集合,就用ArrayList。 |