You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:12:02