HashSet过滤重复菜单权限ID高效且常用,因其基于HashMap实现、平均O(1)时间复杂度,优于List遍历或TreeSet排序;使用时需注意类型统一、空值校验及顺序需求(可选LinkedHashSet或TreeSet)。

用 HashSet 过滤重复的菜单权限 ID 是 Java 中非常常见且高效的做法,核心在于利用 HashSet 不允许重复元素的特性,自动去重。
为什么选 HashSet
HashSet 底层基于 HashMap 实现,添加元素时通过 hash 值快速定位,平均时间复杂度为 O(1),适合大量权限 ID 的去重场景。相比 List + contains 判断,性能优势明显,也比 TreeSet(需排序)更轻量。
基础用法:从集合或数组中去重
假设你有一组原始权限 ID(可能是 Long、Integer 或 String 类型),直接丢进 HashSet 即可自动过滤重复项:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
// 示例:原始权限 ID 列表(可能含重复) List<Long> rawIds = Arrays.asList(101L, 102L, 101L, 103L, 102L); // 创建 HashSet 自动去重 Set<Long> uniqueIds = new HashSet<>(rawIds); // 结果:[101, 102, 103](顺序不保证,如需有序可用 LinkedHashSet) System.out.println(uniqueIds);
结合实际权限处理流程
真实项目中,权限 ID 往往来自数据库查询、接口参数或用户角色配置。推荐封装成工具方法,兼顾空值和类型安全:
立即学习“Java免费学习笔记(深入)”;
- 接收 List<? extends Number> 或 List<String>,统一转为 Long 或 String 存入 HashSet
- 提前判空,避免 NullPointerException
- 若后续需按原始顺序保留唯一项,改用 LinkedHashSet
- 注意:如果权限 ID 来自不同来源(如字符串 "101" 和数字 101),需统一类型再比较,否则会被视为不同元素
注意事项
HashSet 不保证迭代顺序;如果前端要求返回顺序与传入一致,别用普通 HashSet,改用 LinkedHashSet;若需自然排序(如升序),用 TreeSet,但要确保元素可比较或传入 Comparator。

















