Java中多对象字段值重复时如何按指定规则高效去重
高效实现方案(时间复杂度O(n))
核心思路是利用哈希表的O(1)平均读写特性做分组聚合,仅需单次遍历即可完成去重,性能远优于O(n²)的两层循环实现。
具体执行步骤
- 初始化空哈希表,以
startDate的时间戳数值作为键,值为当前该startDate下endDate最大的对象 - 遍历原始对象列表的每一个元素:
- 如果当前元素的
startDate未在哈希表中存在,直接将该元素存入哈希表 - 如果当前元素的
startDate已在哈希表中,比较当前元素和哈希表中存储元素的endDate数值,仅保留endDate更大的元素
- 如果当前元素的
- 遍历完成后,提取哈希表的所有值即为最终结果
代码示例(JavaScript 版)
function getMaxEndDateList(originList) { const dateMap = new Map(); for (const item of originList) { const savedItem = dateMap.get(item.startDate); if (!savedItem || item.endDate > savedItem.endDate) { dateMap.set(item.startDate, item); } } return Array.from(dateMap.values()); }
多语言适配逻辑
所有支持哈希表结构的编程语言都可以直接套用该逻辑:
- Python 用内置
dict即可,键存startDate时间戳数值 - Java 用
HashMap<Long, 自定义对象类>实现 - Go 用
map[int64]自定义结构体类型实现
排序扩展
如果需要最终结果按startDate升序/降序排列,可以在提取哈希表值后额外做一次排序,总时间复杂度为O(n log n),仍然远低于两层循环的O(n²)性能。
内容的提问来源于stack exchange,提问作者Ishan Arora
相关产品推荐
相关产品推荐

