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

如何提升ArrayList中查找并使用重复元素的执行效率

优化方案

原代码采用嵌套循环实现,时间复杂度为O(n²),数据量较大时性能会大幅下降;同时后续循环调用ArrayList.remove(Object)方法每次都会触发元素移位操作,也会带来额外的O(n)开销,两部分叠加是运行效率低的核心原因。

核心优化思路

  • 用HashMap存储已出现的属性对应的首条实例,仅需单次遍历列表即可完成重复识别,时间复杂度降至O(n)
  • 直接构建去重后的新列表,一次性覆盖原列表内容,避免多次删除元素的性能损耗

优化后代码

注意将代码中的PropertyType替换为你实际的someClassProperty属性的类型:

public int removeDuplicateElements(){
    // key为去重判定属性,value为该属性首次出现的元素实例
    Map<PropertyType, SomeType> firstOccurrence = new HashMap<>();
    List<SomeType> reservedElements = new ArrayList<>();
    int duplicateTotal = 0;

    for (SomeType current : ListWithDuplicates) {
        PropertyType currentProp = current.getProperty();
        if (!firstOccurrence.containsKey(currentProp)) {
            // 该属性第一次出现,加入保留列表
            firstOccurrence.put(currentProp, current);
            reservedElements.add(current);
        } else {
            // 判定为重复,调用对应函数
            firstOccurrence.get(currentProp).someFunction(current);
            duplicateTotal++;
        }
    }

    // 一次性更新原列表,避免多次删除的开销
    ListWithDuplicates.clear();
    ListWithDuplicates.addAll(reservedElements);

    return duplicateTotal;
}

注意事项

如果someClassProperty是自定义类型,需要先补全该类的hashCode()和equals()方法,否则HashMap的key匹配逻辑会失效。

内容的提问来源于stack exchange,提问作者Alen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:06:03