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

Java:如何获取对象列表的排序索引数组且避免大量对象创建?

解决方案

你可以直接操作索引数组来实现,完全不需要创建额外的包装对象,内存开销更小,代码也更简洁:

核心思路

  1. 先生成一个和原列表长度一致的索引数组,元素是0到list.size()-1,对应原列表的每个元素位置
  2. 对这个索引数组排序,排序时的比较逻辑直接使用原列表中对应索引的元素进行比较
  3. 最后把排序后的索引数组转成int[]返回

Java 代码示例

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class SortedIndexGenerator {
    public static int[] getSortedIndices(List<? extends Comparable<?>> originalList) {
        int listSize = originalList.size();
        // 初始化索引数组
        Integer[] indices = new Integer[listSize];
        for (int i = 0; i < listSize; i++) {
            indices[i] = i;
        }

        // 按原列表元素的顺序对索引数组排序
        Arrays.sort(indices, (idx1, idx2) -> 
            originalList.get(idx1).compareTo(originalList.get(idx2))
        );

        // 转成int[]返回
        int[] result = new int[listSize];
        for (int i = 0; i < listSize; i++) {
            result[i] = indices[i];
        }
        return result;
    }

    public static void main(String[] args) {
        List<Integer> testList = List.of(50, 40, 30, 20, 10);
        int[] sortedIndices = getSortedIndices(testList);
        // 输出结果:[4, 3, 2, 1, 0]
        System.out.println(Arrays.toString(sortedIndices));
    }
}

优势说明

  • 避免了创建百万级的自定义包装对象,仅需一个Integer数组(内存占用远低于自定义对象数组)
  • 代码逻辑直观,直接围绕索引和原列表操作,不需要额外定义类
  • 利用JDK标准库的排序实现,性能稳定可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 01:49:58