Java 对集合进行排序的最佳方法?

Java 对集合进行排序的最佳方法?,java,collections,Java,Collections,我有一个代表汽车的类: public class Car implements Comparable<Car> { String name; int value; ... @Override public int compareTo(Car o) { return name.compareTo(o.name); } } 公共级轿车{ 字符串名; int值; ... @凌驾 公共内部比较(车辆o){ 返回name.com

我有一个代表汽车的类:

public class Car implements Comparable<Car> {
    String name;
    int value;
    ...
    @Override
    public int compareTo(Car o) {
        return name.compareTo(o.name);
    }
}
公共级轿车{
字符串名;
int值;
...
@凌驾
公共内部比较(车辆o){
返回name.compareTo(o.name);
}
}
另一类代表种族:

public class Race {
    cars = new HashSet<Car>();
    ...
    public Collection<Car> sortByName() {
        List<Car> carList = new ArrayList<>(cars);
        Collections.sort(carList);
        return carList;
    }
}
公共级比赛{
cars=新HashSet();
...
公共集合sortByName(){
列表carList=新阵列列表(cars);
收集.分类(carList);
返回卡利斯特;
}
}

这是我对集合排序的实现,我知道有一个TreeSet,但我不知道如何通过TreeSet而不是HashSet进行比较,因为如果我使用TreeSet,我在其中找不到方法comprator(),如果我做得很好,有人能帮我吗?如果没有,如何使用TreeSet?

使用
比较器
而不是
汽车中的
Comparable
Comparator
位于它所比较的类的外部,而
Comparable
位于该类的内部。更详细的解释如下:

现在,谈谈你的问题。实现这个比较器:

public class CarComparatorByName implements Comparator<Car> {
    public int compare(Car o1, Car o2) {
        return o1.getName().compareTo(o2.getName());
    }
}
TreeSet
现在将使用您创建的比较器


或者,如下面的注释所述,您可以将
Car
作为
可比较的
保存,并在创建时将它们简单地放入
树集。
TreeSet
将使用
Car implements compariable
中定义的自然排序顺序,使用
比较器
而不是
Car
中的
compariable
Comparator
位于它所比较的类的外部,而
Comparable
位于该类的内部。更详细的解释如下:

现在,谈谈你的问题。实现这个比较器:

public class CarComparatorByName implements Comparator<Car> {
    public int compare(Car o1, Car o2) {
        return o1.getName().compareTo(o2.getName());
    }
}
TreeSet
现在将使用您创建的比较器


或者,如下面的注释所述,您可以将
Car
作为
可比较的
保存,并在创建时将它们简单地放入
树集。
TreeSet
将使用
Car implements compariable
中定义的自然排序顺序,使用
比较器
而不是
Car
中的
compariable
Comparator
位于它所比较的类的外部,而
Comparable
位于该类的内部。更详细的解释如下:

现在,谈谈你的问题。实现这个比较器:

public class CarComparatorByName implements Comparator<Car> {
    public int compare(Car o1, Car o2) {
        return o1.getName().compareTo(o2.getName());
    }
}
TreeSet
现在将使用您创建的比较器


或者,如下面的注释所述,您可以将
Car
作为
可比较的
保存,并在创建时将它们简单地放入
树集。
TreeSet
将使用
Car implements compariable
中定义的自然排序顺序,使用
比较器
而不是
Car
中的
compariable
Comparator
位于它所比较的类的外部,而
Comparable
位于该类的内部。更详细的解释如下:

现在,谈谈你的问题。实现这个比较器:

public class CarComparatorByName implements Comparator<Car> {
    public int compare(Car o1, Car o2) {
        return o1.getName().compareTo(o2.getName());
    }
}
TreeSet
现在将使用您创建的比较器


或者,如下面的注释所述,您可以将
Car
作为
可比较的
保存,并在创建时将它们简单地放入
树集。
TreeSet
将使用
中定义的自然排序顺序

基于树映射的NavigableSet实现。根据使用的构造函数,使用元素的自然顺序或在设置的创建时间提供的比较器对元素进行排序。


自然排序是指通过使
Car
类实现
Comparable
接口而强制执行的顺序。只需将您的汽车添加到
树集
实例中,它们就会为您排序。

以下是
树集
中的一个片段:

基于树映射的NavigableSet实现。根据使用的构造函数,使用元素的自然顺序或在设置的创建时间提供的比较器对元素进行排序。


自然排序是指通过使
Car
类实现
Comparable
接口而强制执行的顺序。只需将您的汽车添加到
树集
实例中,它们就会为您排序。

以下是
树集
中的一个片段:

基于树映射的NavigableSet实现。根据使用的构造函数,使用元素的自然顺序或在设置的创建时间提供的比较器对元素进行排序。


自然排序是指通过使
Car
类实现
Comparable
接口而强制执行的顺序。只需将您的汽车添加到
树集
实例中,它们就会为您排序。

以下是
树集
中的一个片段:

基于树映射的NavigableSet实现。根据使用的构造函数,使用元素的自然顺序或在设置的创建时间提供的比较器对元素进行排序。


自然排序是指通过使
Car
类实现
Comparable
接口而强制执行的顺序。只需将您的汽车添加到
TreeSet
实例,它们就会为您排序。

如果您的
Car
类没有覆盖
hashCode
equals
方法,然后使用
HashSet
是没有意义的,你应该从一开始就使用
TreeSet
,它使用
compareTo
方法,从它所持有的引用来看。我不知道你所说的“method comprator()”是什么意思,因为
HashSet
中也没有这样的东西。是的,对不起,我已经累了,如果我修改了我的代码,但我只是更改了