
本文旨在解决 Java 中使用 toString 方法对集合进行排序时遇到的问题。核心在于理解 Arrays.sort() 方法对数组排序不会影响原始集合,以及如何使用 Collections.sort() 方法对 List 集合进行排序。本文将提供详细的代码示例和解释,帮助开发者掌握正确的排序方法。
在 Java 中,对集合进行排序是一个常见的需求。如果希望基于对象的 toString 方法进行排序,需要特别注意排序的方式。直接对集合转换成的数组进行排序,并不会影响原始集合的顺序。
问题分析
常见错误的做法是先将集合转换为数组,然后使用 Arrays.sort() 方法对数组进行排序。例如:
立即学习“Java免费学习笔记(深入)”;
class Person {
    private String privateName;
    private String lastName;
    public Person(String privateName, String lastName) {
        this.privateName = privateName;
        this.lastName = lastName;
    }
    @Override
    public String toString() {
        return privateName + " " + lastName;
    }
}
public class Main {
    public static void main(String[] args) {
        Collection<Person> people = new ArrayList<>();
        people.add(new Person("aaa", "hhh"));
        people.add(new Person("aaa", "aaa"));
        people.add(new Person("aaa", "uuu"));
        Arrays.sort(people.toArray(), Comparator.comparing(Object::toString));
        System.out.println(people); // 输出顺序未改变
    }
}这段代码的意图是按照 Person 对象的 toString 方法的返回值对集合进行排序,但实际上 Arrays.sort() 方法只是对 people.toArray() 返回的新数组进行了排序,而原始的 people 集合的顺序并没有改变。
解决方案
要正确地对集合进行排序,需要直接操作集合本身。对于 List 接口的实现类(例如 ArrayList),可以使用 Collections.sort() 方法。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Person {
    private String privateName;
    private String lastName;
    public Person(String privateName, String lastName) {
        this.privateName = privateName;
        this.lastName = lastName;
    }
    @Override
    public String toString() {
        return privateName + " " + lastName;
    }
}
public class Main {
    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person("aaa", "hhh"));
        people.add(new Person("aaa", "aaa"));
        people.add(new Person("aaa", "uuu"));
        Collections.sort(people, Comparator.comparing(Person::toString));
        System.out.println(people); // 输出顺序已改变
    }
}这段代码首先将 people 声明为 List<Person> 类型,然后使用 Collections.sort() 方法,并传入一个 Comparator,该 Comparator 使用 Person::toString 方法来比较对象。这样就可以直接对 people 集合进行排序,使其按照 toString 方法的返回值进行排序。
代码解释
注意事项
总结
对 Java 集合进行排序时,要根据实际需求选择合适的排序方法。如果需要基于对象的 toString 方法进行排序,务必使用 Collections.sort() 方法,并提供一个基于 toString 方法的 Comparator。避免使用 Arrays.sort() 方法对集合转换成的数组进行排序,因为这不会影响原始集合的顺序。正确理解和运用这些方法,可以有效地对集合进行排序,满足各种业务需求.
以上就是Java 中如何正确地对集合进行排序(基于 toString 方法)的详细内容,更多请关注php中文网其它相关文章!
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号