Java 集合框架图
集合是数据结构的载体,其中包括接口、抽象类、并发包中的类、早起线程安全的类。
数据结构与时间复杂度
略过
HashMap的基本概念
三个基本概念
table:存储所有节点数据的数组
slot:哈希槽。即table[i]这个位置
bucket:哈希桶。table[i]上所有元素形成的表或树的集合。
HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含Node内部类。
当同一bucket的元素达到8个时,bucket会用红黑树存储元素。
HashMap如何设置初始容量
看一遍步骤能明白这是在做什么?但背后逻辑还需要再思考。真有必要这么复杂吗?
HashMap的哈希算法
剖析Collectors.toMap方法内部构造:
【强制】在使用java.util.stream.Collectors类的toMap()方法转发为Map集合时,一定要使用含有参数类型为BinaryOperator,参数名为mergeFunction的方法,否则当出现相同key值时会抛出IllegalStateException异常。
ArrayList的subList结果不可强转成ArrayList
ArrayList中的subList方法return的是一个SubList,它并不是ArrayList本身,也不是继承于ArrayList,所以强转会抛出ClassCastException异常。
在subList场景中
- 高度注意对父集合元素的增加或删除,均会导致自列表的遍历
- 增加、删除产生ConcurrentModificationException异常
- 每次subList子列表的遍历、增加、删除都会调用checkForComodification()。
credit:图片均来自孤尽老师的PPT。