使用快速排序按Salary字段排序ArrayList失败问题排查
快速排序对Employee列表排序未生效的问题排查
问题核心
你的sort方法返回了一个新的排序后的ArrayList,但在main方法里调用sort(empList)时,没有将返回结果赋值给empList。原列表empList完全未被修改,因此两次打印的内容完全一致。
修复步骤
1. 修正main方法的调用逻辑
将排序后的结果重新赋值给empList,替换原来的空调用:
// 原代码:sort(empList); empList = sort(empList);
2. 优化排序方法的边界判断(可选)
原代码中a.size()<=0的判断冗余,ArrayList的size不可能为负数,改为判断a.size() <= 1更合理(单个元素无需排序):
public static ArrayList<Employee> sort(ArrayList<Employee> a) { if(a.size() <= 1) return a; ArrayList<Employee> smaller = new ArrayList<Employee>(); ArrayList<Employee> greater = new ArrayList<Employee>(); int pivot = a.get(0).getSalary(); for(int i=1; i<a.size(); i++) { Integer n = a.get(i).getSalary(); if(n.compareTo(pivot) < 0) smaller.add(a.get(i)); else greater.add(a.get(i)); } smaller = sort(smaller); greater = sort(greater); smaller.add(a.get(0)); smaller.addAll(greater); return smaller; }
修复后预期输出
修改后再次运行,列表会按Salary升序排列:
Employee ID: 1
Name: A 1
Department: Marketing
Salary: 1Employee ID: 2
Name: B 2
Department: Sales
Salary: 2Employee ID: 5
Name: J 5
Department: Sales
Salary: 7Employee ID: 3
Name: C 3
Department: Admin
Salary: 342Employee ID: 4
Name: D 4
Department: Marketing
Salary: 55555
内容的提问来源于stack exchange,提问作者NewbieDev
相关产品推荐
相关产品推荐

