首先,集合的三种类型:List、Set、Map
一、List(有序,可重复)
二、Set(无序,唯一)
通常用来过滤重复的数据
HashSet
底层数据结构是哈希表。
哈希表依赖两个方法:hashCode()和equals()
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值
是true:说明元素重复,不添加
是false:就直接添加到集合
TreeSet
底层数据结构是红黑树。(是一种自平衡的二叉树)
三、Map(双列集合)
A:Map集合的数据结构仅仅针对键有效,与值无关。
B:存储的是键值对形式的元素,键唯一,值可重复。
HashMap
底层数据结构是哈希表。线程不安全,效率高
Hashtable
底层数据结构是哈希表。线程安全,效率低
TreeMap
底层数据结构是红黑树。(是一种自平衡的二叉树)
进阶知识:
1.HashMap底层实现原理解析
相比 jdk1.7 的 HashMap 而言,jdk1.8最重要的就是引入了红黑树的设计,红黑树除了插入操作慢其他操作都比链表快,HashMap是线程不安全的,不要在并发的环境中同时操作HashMap,建议使用ConcurrentHashMap,默认容量是16,对于一个默认的HashMap来说,默认情况下,当其size大于12(16*0.75)时就会触发扩容
- 红黑树查询:其访问性能近似于折半查找,时间复杂度 O(logn);
- 链表查询:这种情况下,需要遍历全部元素才行,时间复杂度 O(n);