- 1:集合(自己补齐)
- Collection(单列集合)
- List(有序,可重复)
- ArrayList
- 底层数据结构是数组,查询快,增删慢
- 线程不安全,效率高
- Vector
- 底层数据结构是数组,查询快,增删慢
- 线程安全,效率低
- LinkedList
- 底层数据结构是链表,查询慢,增删快
- 线程不安全,效率高
- Set(无序,唯一)
- HashSet
- 底层数据结构是哈希表。
- 哈希表依赖两个方法:hashCode()和equals()
- 执行顺序:
- 首先判断hashCode()值是否相同
- 是:继续执行equals(),看其返回值
- 是true:说明元素重复,不添加
- 是false:就直接添加到集合
- 否:就直接添加到集合
- 最终:
- 自动生成hashCode()和equals()即可
-
- LinkedHashSet
- 底层数据结构由链表和哈希表组成。
- 由链表保证元素有序。
- 由哈希表保证元素唯一。
- TreeSet
- 底层数据结构是红黑树。(是一种自平衡的二叉树)
- 如何保证元素唯一性呢?
- 根据比较的返回值是否是0来决定
- 如何保证元素的排序呢?
- 两种方式
- 自然排序(元素具备比较性)
- 让元素所属的类实现Comparable接口
- 比较器排序(集合具备比较性)
- 让集合接收一个Comparator的实现类对象
- Map(双列集合)
- A:Map集合的数据结构仅仅针对键有效,与值无关。
- B:存储的是键值对形式的元素,键唯一,值可重复。
-
- HashMap
- 底层数据结构是哈希表。线程不安全,效率高
- 哈希表依赖两个方法:hashCode()和equals()
- 执行顺序:
- 首先判断hashCode()值是否相同
- 是:继续执行equals(),看其返回值
- 是true:说明元素重复,不添加
- 是false:就直接添加到集合
- 否:就直接添加到集合
- 最终:
- 自动生成hashCode()和equals()即可
- LinkedHashMap
- 底层数据结构由链表和哈希表组成。
- 由链表保证元素有序。
- 由哈希表保证元素唯一。
- Hashtable
- 底层数据结构是哈希表。线程安全,效率低
- 哈希表依赖两个方法:hashCode()和equals()
- 执行顺序:
- 首先判断hashCode()值是否相同
- 是:继续执行equals(),看其返回值
- 是true:说明元素重复,不添加
- 是false:就直接添加到集合
- 否:就直接添加到集合
- 最终:
- 自动生成hashCode()和equals()即可
- TreeMap
- 底层数据结构是红黑树。(是一种自平衡的二叉树)
- 如何保证元素唯一性呢?
- 根据比较的返回值是否是0来决定
- 如何保证元素的排序呢?
- 两种方式
- 自然排序(元素具备比较性)
- 让元素所属的类实现Comparable接口
- 比较器排序(集合具备比较性)
- 让集合接收一个Comparator的实现类对象
-
- 2:到底使用那种集合(自己补齐)
- 看需求。
-
- 是否是键值对象形式:
- 是:Map
- 键是否需要排序:
- 是:TreeMap
- 否:HashMap
- 不知道,就使用HashMap。
-
- 否:Collection
- 元素是否唯一:
- 是:Set
- 元素是否需要排序:
- 是:TreeSet
- 否:HashSet
- 不知道,就使用HashSet
-
- 否:List
- 要安全吗:
- 是:Vector(其实我们也不用它,后面我们讲解了多线程以后,我在给你回顾用谁)
- 否:ArrayList或者LinkedList
- 增删多:LinkedList
- 查询多:ArrayList
- 不知道,就使用ArrayList
- 不知道,就使用ArrayList
-
- 3:集合的常见方法及遍历方式
- Collection:
- add()
- remove()
- contains()
- iterator()
- size()
-
- 遍历:
- 增强for
- 迭代器
-
- |--List
- get()
-
- 遍历:
- 普通for
- |--Set
-
- Map:
- put()
- remove()
- containskey(),containsValue()
- keySet()获取所有键
- get()通过键找值
- value()获取所值的集合
- entrySet()获取所有键值对的集合
- size()
-
- 遍历:
- 根据键找值
- 根据键值对对象分别找键和值
-
复制代码 |