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

如何根据另一个ArrayList的排序结果调整单词ArrayList的顺序

解决两个列表同步按词频排序的问题

Collections工具类没有直接的方法可以同步排序两个独立的ArrayList,因为两个列表是完全独立的,排序其中一个不会自动关联另一个的索引。下面是两种可行的解决方式:

方案一:封装数据为对象(推荐)

把单词和对应的词频封装成一个自定义类,然后对这个类的列表排序,这是最符合面向对象设计的方式,也能从根源上避免索引同步出错的问题。

步骤1:定义数据类

class WordFrequency {
    private String word;
    private int frequency;

    public WordFrequency(String word, int frequency) {
        this.word = word;
        this.frequency = frequency;
    }

    // 提供getter方法用于排序和提取数据
    public String getWord() {
        return word;
    }

    public int getFrequency() {
        return frequency;
    }
}

步骤2:创建列表并排序

// 初始化包含单词和词频的对象列表
List<WordFrequency> wordFreqList = new ArrayList<>();
wordFreqList.add(new WordFrequency("the", 1));
wordFreqList.add(new WordFrequency("I", 10));
wordFreqList.add(new WordFrequency("false", 5));
wordFreqList.add(new WordFrequency("too", 7));

// 按词频降序排序
Collections.sort(wordFreqList, (a, b) -> Integer.compare(b.getFrequency(), a.getFrequency()));

// 提取排序后的单词和词频
List<String> sortedWords = new ArrayList<>();
List<Integer> sortedFrequencies = new ArrayList<>();
for (WordFrequency wf : wordFreqList) {
    sortedWords.add(wf.getWord());
    sortedFrequencies.add(wf.getFrequency());
}

// 输出结果
System.out.println(sortedWords);      // 输出: [I, too, false, the]
System.out.println(sortedFrequencies); // 输出: [10, 7, 5, 1]

方案二:通过索引列表间接排序(不推荐)

如果一定要保留两个独立的列表,可以先创建索引列表,按词频排序索引,再根据排序后的索引重新构建单词和词频列表:

ArrayList<String> words = new ArrayList<>(Arrays.asList("the", "I", "false","too"));
ArrayList<Integer> frequency = new ArrayList<>(Arrays.asList(1, 10, 5, 7));

// 创建索引列表
List<Integer> indices = new ArrayList<>();
for (int i = 0; i < frequency.size(); i++) {
    indices.add(i);
}

// 按词频降序排序索引
Collections.sort(indices, (a, b) -> Integer.compare(frequency.get(b), frequency.get(a)));

// 根据排序后的索引重新构建列表
List<String> sortedWords = new ArrayList<>();
List<Integer> sortedFrequencies = new ArrayList<>();
for (int idx : indices) {
    sortedWords.add(words.get(idx));
    sortedFrequencies.add(frequency.get(idx));
}

// 输出结果
System.out.println(sortedWords);      // 输出: [I, too, false, the]
System.out.println(sortedFrequencies); // 输出: [10, 7, 5, 1]

注意:方案二需要手动维护索引关系,当列表元素增删时容易出错,因此更推荐方案一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:55:19