- 哈希表 哈希表(散列表)是一种通过键值对直接访问的数据结构,它无需比较就能快速定位目标元素。哈希函数建立键值与存储位置的映射关系,从而提升查找效率。存储记录的数组称为哈希表。
哈希函数常见类型:
- 除留余数法
- 直接定址法
- 平方取中法
- 折叠法
- 随机数法
- 数学分析法
哈希冲突解决方案:
-
闭散列(开放定址法):发生冲突时线性探测查找下一个空位
-
开散列(链地址法):将冲突元素以链表形式存储在哈希桶中。极端情况下可将链表转为红黑树结构
-
HashSet 底层实现基于HashMap,数据存储在HashMap的key上。 特点:无序、唯一 注意事项:
- 相同hashcode会调用equals方法二次比较
- 方法与List接口通用
- 不支持索引操作
- LinkedHashSet HashSet子类,底层使用LinkedHashMap(数组+双向链表)。 特点:
- 通过hashcode确定存储位置
- 双向链表维护插入顺序
- 不可重复
- 有序且唯一
- TreeSet 基于二叉树结构实现:
- 数据插入时自动排序
- 中序遍历输出升序结果 要求:
- 元素需实现Comparable接口
- 或构造时传入Comparator对象
-
排序接口 比较方式:
-
Comparable接口:
- 类实现接口
- 重写compareTo方法
- 适用于固定排序规则
-
Comparator接口:
- 外部比较器
- 重写compare方法
- 更灵活,支持匿名类/lambda
- 适用于动态排序需求
-
Collections工具类 常用方法:
- 排序:sort(), sort(list,Comparator)
- 反转:reverse()
- 随机:shuffle()
- 交换:swap()
- 查找:max(), min(), binarySearch()
- 修改:fill(), replaceAll()
- 统计:frequency()
- 旋转:rotate()
线程同步方法:
- synchronizedCollection()
- synchronizedMap()
- synchronizedList()
- synchronizedSet()