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

ArrayList<String>排序方法未返回预期结果,疑存在逻辑错误

问题分析与修复

原方法没实现排序的核心原因是逻辑完全错误:代码里只在两个字符串完全相等时才往新列表加元素,等于啥排序逻辑都没做,最后返回的新列表和原列表顺序一模一样。

错误代码问题拆解

看你的sortWords方法:

public ArrayList<String> sortWords(ArrayList<String> wordList) {
    ArrayList<String> newList = new ArrayList<String>();
    for(int outter = 0; outter<wordList.size(); outter ++){
      for(int inner = 0; inner<wordList.size(); inner ++){
         if((wordList.get(outter)).compareTo(wordList.get(inner)) ==0 ){ 
           newList.add(inner,wordList.get(outter));
       }
   }
    }
       return newList;
}

这里compareTo() == 0只有当内外层循环取到同一个元素时才成立,相当于把原列表的元素按原顺序又抄了一遍,完全没做排序。

修复方案

如果要手动用compareTo()实现字母序排序,给你两种可行方案:

方案1:手动写冒泡排序(符合手动比较的要求)

冒泡排序通过相邻元素比较交换,逐步把大的元素移到后面,用compareTo()判断字符串顺序:

public ArrayList<String> sortWords(ArrayList<String> wordList) {
    // 先复制原列表,避免修改传入的原数据
    ArrayList<String> sortedList = new ArrayList<>(wordList);
    int listSize = sortedList.size();
    
    // 外层循环控制排序轮数
    for (int i = 0; i < listSize - 1; i++) {
        // 内层循环比较相邻元素,每轮把最大的元素移到末尾
        for (int j = 0; j < listSize - i - 1; j++) {
            // compareTo返回正数,说明当前元素比后一个元素大,需要交换位置
            if (sortedList.get(j).compareTo(sortedList.get(j + 1)) > 0) {
                String temp = sortedList.get(j);
                sortedList.set(j, sortedList.get(j + 1));
                sortedList.set(j + 1, temp);
            }
        }
    }
    return sortedList;
}

方案2:用Java内置工具类(简洁高效)

如果不需要手动实现排序逻辑,直接用Collections.sort()就行,底层也是基于compareTo()做自然排序:

import java.util.Collections;

public ArrayList<String> sortWords(ArrayList<String> wordList) {
    ArrayList<String> sortedList = new ArrayList<>(wordList);
    Collections.sort(sortedList);
    return sortedList;
}

测试结果

用你提供的测试文本:environment,city,character,road,salad,banner,bed,thank,attachment,medium,record,speech,pause,修复后的方法会返回正确排序结果:
[attachment, banner, bed, character, city, environment, medium, pause, record, road, salad, speech, thank]

你的MyConsole代码没问题,调用sortWords()后直接打印就可以,要是想输出更清晰,可以换成System.out.println()或者遍历逐个打印元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:25:16