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

如何基于元素首次出现顺序对Java List<Integer>进行排序?

按元素首次出现顺序排序Java List的轻量级实现

嘿,这个需求其实挺好解决的,而且完全符合你要的轻量级要求——毕竟你的列表最多也就500个元素,不需要复杂的算法。核心思路就是先记录每个元素第一次出现的位置,再用这个位置作为排序依据,具体步骤和代码我给你理清楚:

实现思路

  • 第一步:遍历原列表,用一个HashMap记录每个元素首次出现的索引。遇到重复元素时跳过,只保留第一次出现的位置。
  • 第二步:对原列表进行排序,排序规则是:比较两个元素对应的首次出现索引,索引越小的元素排得越靠前。

代码示例

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FirstOccurrenceSort {
    public static void main(String[] args) {
        // 你的原始列表
        List<Integer> originalList = Arrays.asList(0, 5, 2, 1, 3, 2, 6, 1, 1, 0, 10);
        
        // 存储每个元素首次出现的索引
        Map<Integer, Integer> firstOccurrenceMap = new HashMap<>();
        for (int i = 0; i < originalList.size(); i++) {
            Integer num = originalList.get(i);
            // 只在元素第一次出现时记录索引
            firstOccurrenceMap.putIfAbsent(num, i);
        }
        
        // 复制原列表(避免修改原始数据,不需要的话可以直接排序原列表)
        List<Integer> sortedList = new ArrayList<>(originalList);
        // 自定义排序规则:按首次出现的索引从小到大排序
        sortedList.sort((num1, num2) -> firstOccurrenceMap.get(num1) - firstOccurrenceMap.get(num2));
        
        // 输出结果:[0, 0, 5, 2, 2, 1, 1, 1, 3, 6, 10]
        System.out.println(sortedList);
    }
}

为什么这个方案适合你?

  • 轻量级:额外空间只用来存不同元素的首次索引,对于500个元素来说,最多也就500个键值对,内存开销可以忽略。
  • 高效:遍历列表是O(n),排序是O(n log n),这是排序问题的最优时间复杂度之一,完全能处理你的数据规模。
  • 简洁易懂:代码逻辑清晰,没有复杂的依赖,直接用Java原生API就能实现。

如果你的列表里可能有null元素,只需要在遍历的时候加个null判断就行,不过看你的示例都是整数,应该不需要额外处理~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:47:38