一、集合的基本概念总结
Collection(单列集合)
- List(有序,可重复)
- ArrayList
- 底层数据结构为数组,查询快,增删慢,线程不安全,效率高
- Vector
- 底层数据结构为数组,查询快,增删慢,线程安全,效率低
- LinkedList
- 底层数据结构为链表,查询慢,增删快,线程不安全,效率高
- Set(无序,唯一)
- HashSet
- 底层数据结构为哈希表
- 哈希表依赖两个方法:hashCode()和equals()
- 执行顺序
- 首先判断hashCode()的值是否相同
- 是:执行equals()方法,看其返回值
- 是true:说明元素重复,不添加
- 是false:直接添加到集合
- 否:直接添加
- 最终:自动生成equals()和hashCode()方法在目标类当中
- LinkedHashSet
- 底层数据结构由链表和哈希表组成
- 链表保证元素有序
- 哈希表保证元素唯一
- TreeSet
- 底层数据结构是红黑树(红黑树是一种自平衡的二叉树)
- 如何保证村的元素唯一性呢?
- 根据比较的返回值是否为零来判断
- 如何保证元素的排序呢?
- 自然排序(元素具备比较性):让元素所属的类实现Comparable接口
- 比较器排序(集合具备比较性):让集合接收一个Comparator的实现类对象
Map(双列集合)
- Map集合的数据结构只针对键有效,与值无关;
- 存储的是键值对的元素,键唯一,值可重复
- HashMap
- 底层数据结构为哈希表,线程不安全,效率高
- 哈希表依赖两个方法:hashCode()和equals()
- 执行顺序
- 首先判断hashCode()的值是否相同
- 是:执行equals()方法,看其返回值
- 是true:说明元素重复,不添加
- 是false:直接添加到集合
- 否:直接添加
- 最终:自动生成equals()和hashCode()方法在目标类当中
- LinkedHashMap
- 底层数据结构由链表和哈希表组成
- 链表保证元素有序
- 哈希表保证元素唯一
- Hashtable
- 底层数据结构为哈希表,线程安全,效率低
- 哈希表依赖两个方法:hashCode()和equals()
- 执行顺序
- 首先判断hashCode()的值是否相同
- 是:执行equals()方法,看其返回值
- 是true:说明元素重复,不添加
- 是false:直接添加到集合
- 否:直接添加
- 最终:自动生成equals()和hashCode()方法在目标类当中
- TreeMap
- 底层数据结构是红黑树(红黑树是一种自平衡的二叉树)
- 如何保证村的元素唯一性呢?
- 根据比较的返回值是否为零来判断
- 如何保证元素的排序呢?
- 自然排序(元素具备比较性):让元素所属的类实现Comparable接口
- 比较器排序(集合具备比较性):让集合接收一个Comparator的实现类对象
二、到底使用那种集合
- 看需求
- 是否是键值对对象形式:
- 是:Map
- 键是否需要排序
- 是:TreeMap
- 否:HashMap
- 不知道使用 HashMap
- 否:Collection
- 元素是否唯一
- 是 Set
- 元素是否需要排序:
- 是:TreeSet
- 否:HashSet
- 不知道使用HashSet
- 否 List
- 要安全吗:
- 要:Vector
- 不要:ArrayList或者LinkedList
- 增删多:LinkedList
- 查询多:ArrayList
- 不知道,使用ArrayList
- 不知道,使用ArrayList
三、集合常见常见方法及遍历方式
- Collection:
- add()
- remove()
- contains()
- iterator()
- size()
- 遍历
- 增强for
- 迭代器
- List
- get()
- 遍历:
- 普通for
- Set
- Map
- put()
- remove()
- containskey(),containsValue()
- keySet()
- get()
- value()
- entrySet()
- size()
- 遍历:
- 根据键找值
- 根据键值对对象分别找键和值
四.尾巴
1.如有错误欢迎大家指出,我会及时更正,有什么不懂也可以留言提问,互相交流吗。
2.也许大家觉得这没什么,但是我会认真对待,把它当成我的笔记、心得、这样才能提升自己。