Collection 存放是单个对象。常用的List和Set都继承自该接口。
List 的特点是:有序,可重复。有序的意思是指, List 中对象存放的“位置”和将对象放入 List 中的先后有关系。例如,依次将学号为1、2、3的 Student 放入 List 中,遍历 List 输出元素的顺序可能是 [Student 1, Student 2, Student 3] 或者 [Student 3, Student 2, Student 1] ,之所以可能不同是因为我们没有说明实现类。
List 的常用具体实现类: ArrayList 和 Vector 的底层实现是一样的,他们区别是: ArrayList 线程不安全,但效率快; Vector 线程安全,代价是效率慢。他们的底层都是用数组来实现,也就是说,对象都是存放在一个一维 Object 数组里的,对数组进行封装,优化对数组的操作,也就是他们的方法。
另外一个常用的List实现类是 LinkedList ,它是双向链表,特点是:修改速度快,查询速度慢。这里说的修改是指对 LinkedList 的修改,比如插入或者删除 LinkedList 中的一个对象。
由于对 List 的查询都只是单纯的遍历整个链表,因此 List 的缺点是查询速度慢
而 Set 的实现类的弥补了这点,Set 的实现类查询速度较快。
Set 的特点是:无序,不可重复。无序的意思是指, Set 中对象存放的“位置”和将对象放入 Set 中的先后没有关系。例如,依次将学号为1、2、3的 Student 放入Set中,遍历 Set 输出元素的顺序则不会是按放入的顺序或者逆序。
Set 的常用具体实现类: HashSet 和 TreeSet 。 TreeSet 实现的接口是 SortedSet , SortedSet 继承自 Set ,因此 TreeSet 也是 Set 的实现类。
Set的另外一个常用实现类是 TreeSet ,它实现的是 SortedSet 。它是可排序的 Set ,TreeSet 可以使用两种排序方式进行排序:自然排序和比较器排序。这两种排序方法我会在以后的博客里说到。这两种排序方式分别对应着 TreeSet 的两个构造方法: TreeSet() 和 TreeSet(Comparator comparator) 。 TreeSet 基于平衡二叉树实现。平衡二叉树的特点是查询速度快,增删速度较慢。所以当我们需要对数据(也就是对象)频繁查询的话,那我们选择TreeSet更加优化。
List 的特点是:有序,可重复。有序的意思是指, List 中对象存放的“位置”和将对象放入 List 中的先后有关系。例如,依次将学号为1、2、3的 Student 放入 List 中,遍历 List 输出元素的顺序可能是 [Student 1, Student 2, Student 3] 或者 [Student 3, Student 2, Student 1] ,之所以可能不同是因为我们没有说明实现类。
List 的常用具体实现类: ArrayList 和 Vector 的底层实现是一样的,他们区别是: ArrayList 线程不安全,但效率快; Vector 线程安全,代价是效率慢。他们的底层都是用数组来实现,也就是说,对象都是存放在一个一维 Object 数组里的,对数组进行封装,优化对数组的操作,也就是他们的方法。
另外一个常用的List实现类是 LinkedList ,它是双向链表,特点是:修改速度快,查询速度慢。这里说的修改是指对 LinkedList 的修改,比如插入或者删除 LinkedList 中的一个对象。
由于对 List 的查询都只是单纯的遍历整个链表,因此 List 的缺点是查询速度慢
而 Set 的实现类的弥补了这点,Set 的实现类查询速度较快。
Set 的特点是:无序,不可重复。无序的意思是指, Set 中对象存放的“位置”和将对象放入 Set 中的先后没有关系。例如,依次将学号为1、2、3的 Student 放入Set中,遍历 Set 输出元素的顺序则不会是按放入的顺序或者逆序。
Set 的常用具体实现类: HashSet 和 TreeSet 。 TreeSet 实现的接口是 SortedSet , SortedSet 继承自 Set ,因此 TreeSet 也是 Set 的实现类。
Set的另外一个常用实现类是 TreeSet ,它实现的是 SortedSet 。它是可排序的 Set ,TreeSet 可以使用两种排序方式进行排序:自然排序和比较器排序。这两种排序方法我会在以后的博客里说到。这两种排序方式分别对应着 TreeSet 的两个构造方法: TreeSet() 和 TreeSet(Comparator comparator) 。 TreeSet 基于平衡二叉树实现。平衡二叉树的特点是查询速度快,增删速度较慢。所以当我们需要对数据(也就是对象)频繁查询的话,那我们选择TreeSet更加优化。