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

如何对两个ArrayList按相同顺序排序?数字列表需升序排列

实现两个ArrayList的同步排序

你需要让numbers按升序排序,同时让linkers保持和numbers原本的元素配对关系,这里有两种实用的实现方式:

方法一:用自定义配对对象绑定元素

把数字和对应的字符串封装成一个对象,让它们始终关联,再对对象列表排序:

  1. 先定义一个简单的配对类:
class NumberLinkerPair {
    int number;
    String linker;

    public NumberLinkerPair(int number, String linker) {
        this.number = number;
        this.linker = linker;
    }
}
  1. 将两个列表的元素配对,排序后重新填充原列表:
// 把数字和字符串一一配对
ArrayList<NumberLinkerPair> pairList = new ArrayList<>();
for (int i = 0; i < numbers.size(); i++) {
    pairList.add(new NumberLinkerPair(numbers.get(i), linkers.get(i)));
}

// 按数字升序排序配对列表
Collections.sort(pairList, (a, b) -> Integer.compare(a.number, b.number));

// 清空原列表,重新填入排序后的元素
numbers.clear();
linkers.clear();
for (NumberLinkerPair pair : pairList) {
    numbers.add(pair.number);
    linkers.add(pair.linker);
}

方法二:通过排序索引实现同步

如果不想新建类,可以直接操作元素的索引,基于numbers的值排序索引,再按索引重新生成列表:

// 创建包含所有索引的列表
ArrayList<Integer> indices = new ArrayList<>();
for (int i = 0; i < numbers.size(); i++) {
    indices.add(i);
}

// 按照numbers中对应位置的数值,对索引排序
Collections.sort(indices, (a, b) -> Integer.compare(numbers.get(a), numbers.get(b)));

// 根据排序后的索引,生成新的有序列表
ArrayList<Integer> sortedNumbers = new ArrayList<>();
ArrayList<String> sortedLinkers = new ArrayList<>();
for (int index : indices) {
    sortedNumbers.add(numbers.get(index));
    sortedLinkers.add(linkers.get(index));
}

// 替换原列表(如果不需要保留原数据,这步可以直接覆盖)
numbers.clear();
numbers.addAll(sortedNumbers);
linkers.clear();
linkers.addAll(sortedLinkers);

两种方法都能正确处理重复值(比如你例子里的两个0),保证配对关系不会错乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:15:49