Collection接口是最基本的集合接口,它不提供直接的实现。
重要性:集合类是Java数据结构的实现
这里记笔记的思路是先将Collection接口的功能写完,然后将其子类特有的功能记录一下
一、数组与集合的区别
1. 长度区别:
数组的长度固定
集合的长度不固定
2. 内容不同
数组存储同一类元素
集合可以储存不是同一类的元素
3. 元素的数据类型问题
数组可以存储基本数据类型和引用数据类型
集合只能存储引用类型(Integer等等)
由此可以得出:
集合类的特点:只用于存储对象、长度可变、可存储不同数据类型
二、Collection框架
Collection(单列集合)
1. List接口
定义:有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
特点:有序(存入顺序和取出顺序有序)
可重复(存入的元素不唯一,可重复)
-
ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高 -
Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低 -
LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
2.Set接口
定义:一个不包含重复元素的 collection。即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。
特点:无序(存入顺序和取出顺序无序)
唯一(存入的元素唯一,不可重复)
- HashSet
底层数据结构是哈希表。
哈希表依赖两个方法:hashCode()和equals()
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值
是true:说明元素重复,不添加
是false:就直接添加到集合
否:就直接添加到集合
最终:
自动生成hashCode()和equals()即可 - LinkedHashSet
底层数据结构由链表和哈希表组成。
由链表保证元素有序。
由哈希表保证元素唯一。 - TreeSet
底层数据结构是红黑树。(是一种自平衡的二叉树)
(1)如何保证元素唯一性呢?
根据比较的返回值是否是0来决定
(2)如何保证元素的排序呢?
两种方式
自然排序(元素具备比较性)
让元素所属的类实现Comparable接口
比较器排序(集合具备比较性)
让集合接收一个Comparator的实现类对象
接下来的文章仔细记录一下每个实现类的具体功能和相关知识