Java之集合
一、相关概念
1.集合框架

接口:定义规范
|
抽象类:实现一部分通用方法
|
普通类:重写接口/抽象类的所有抽象方法。
Collection 接口的接口 对象的集合(单列集合)
├——-List 接口:元素按进入先后有序保存,可重复
│—————-├ LinkedList 接口实现类, 链表, 适合插入删除, 线程不安全
│—————-├ ArrayList 接口实现类, 数组, 适合随机访问, 线程不安全
│—————-└ Vector 接口实现类 数组, 适合线程安全
│ ———————-└ Stack 是Vector类的实现类
└——-Set 接口: 仅接收一次,不可重复,并做内部排序
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
└ —————-TreeSet 底层实现为红黑树,元素排好序
Map 接口 键值对的集合 (双列集合)
├———Hashtable 接口实现类, 线程安全
├———HashMap 接口实现类 , 线程不安全-
│—————–├ LinkedHashMap 双向链表和哈希表实现
│—————–└ WeakHashMap
├ ——–TreeMap 红黑树对所有的key进行排序
└———IdentifyHashMap
2.集合接口
List:元素有序,可重复。类似动态数组。
1)ArrayList:底层数据结构是数组,查询速度快,增删慢。
2)LinkedList:底层数据结构是链表,增删速度快,查询慢。
3)Vertor:底层数据结构是数组,线程安全。
Set:元素无序,不可重复。类似数学中的集合。
1)HashSet:底层数据结构是哈希表,查询速度快。
2)LinkedHashSet :底层数据结构是哈希表+链表,元素有序。
3)TreeSet:底层数据结构是红黑树,元素有序,从小到大。
Map:具有映射关系key-value键值对的集合。元素不可重复,但可以按照元素大小自动排序。
1)HashMap:
1.1 数组+链表+红黑树(JDK1.8)
1.2 HashMap如何解决hash冲突:链地址法
1.3 自动扩容
a) hashmap的容量都是2的倍数,比如2,4,8 ...
b) 每次扩容都是扩一倍,2到4 ,4到8,8到16等等
c) 扩容因子:默认是0.75,也可以指定一个小数
d) 扩容时间点:当容器内的元素数量到达:容量*扩容因子 开始扩容
1.4 HashMap中链表转为红黑树的条件
条件:数组长度大于64且链表长度到大于8。
当原有的红黑树内数量 < 6时,则将红黑树转换成链表。
ConcurrentHashMap:线程安全,JDK1.8放弃了分段锁的方式,而是采用CAS原子操作+synchronized方式来保证线程的安全。

2)TreeMap:底层数据结构是红黑树。
3)HashTable:底层数据结构是通过"拉链法"实现的哈希表,线程安全。
3.集合遍历 Iterator

浙公网安备 33010602011771号