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

如何同步排序多个ArrayList?以indexes列表为排序依据

同步排序多个并行ArrayList的解决方案

直接使用Collections.sort(indexes)只会单独排序indexes列表,无法同步调整另外两个列表的顺序,得换个思路利用Collections.sort实现同步排序,下面是两种可行方案:

方案一:将关联元素绑定为对象排序

  1. 先定义一个类,把三个列表中对应位置的元素封装成一个整体:
class Data {
    int index;
    String name;
    String upper;

    Data(int index, String name, String upper) {
        this.index = index;
        this.name = name;
        this.upper = upper;
    }
}
  1. 将三个ArrayList的元素转换为Data对象列表:
ArrayList<Data> dataList = new ArrayList<>();
for (int i = 0; i < indexes.size(); i++) {
    dataList.add(new Data(indexes.get(i), names.get(i), upper.get(i)));
}
  1. 使用Collections.sort对Data列表按照index字段排序:
Collections.sort(dataList, (a, b) -> Integer.compare(a.index, b.index));
  1. 最后将排序后的Data列表拆分回原有的三个ArrayList:
indexes.clear();
names.clear();
upper.clear();
for (Data d : dataList) {
    indexes.add(d.index);
    names.add(d.name);
    upper.add(d.upper);
}

方案二:通过排序原始索引实现同步调整

如果不想自定义类,可以借助原始索引的排序来实现:

  1. 创建一个存储原始位置索引的列表:
ArrayList<Integer> originalIndices = new ArrayList<>();
for (int i = 0; i < indexes.size(); i++) {
    originalIndices.add(i);
}
  1. 使用Collections.sort对原始索引列表排序,排序依据是indexes中对应位置的值:
Collections.sort(originalIndices, (a, b) -> Integer.compare(indexes.get(a), indexes.get(b)));
  1. 根据排序后的索引,重新构建三个列表:
ArrayList<Integer> sortedIndexes = new ArrayList<>();
ArrayList<String> sortedNames = new ArrayList<>();
ArrayList<String> sortedUpper = new ArrayList<>();
for (int idx : originalIndices) {
    sortedIndexes.add(indexes.get(idx));
    sortedNames.add(names.get(idx));
    sortedUpper.add(upper.get(idx));
}
// 替换原列表
indexes = sortedIndexes;
names = sortedNames;
upper = sortedUpper;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:35:25