我有一个代表汽车的课程:
public class Car implements Comparable<Car> {
String name;
int value;
...
@Override
public int compareTo(Car o) {
return 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;
}
}
它是我对排序Set的实现,我知道有一个TreeSet,但我不知道如何通过TreeSet而不是HashSet进行比较,因为如果我使用TreeSet我无法找到方法comprator(),任何人都可以帮助我如果我做得好或如果不使用TreeSet?
答案 0 :(得分:2)
以下是TreeSet
javadoc:
A NavigableSet implementation based on a TreeMap. The elements are ordered using their natural ordering, or by a Comparator provided at set creation time, depending on which constructor is used.
自然排序是指通过使Car
类实现Comparable
接口来强制执行的顺序。只需将您的汽车添加到TreeSet
实例,它们就会为您排序。
答案 1 :(得分:1)
在Comparator
中使用Comparable
代替Car
。 Comparator
是它所比较的类的外部,而Comparable
是该类的内部。更详细的解释如下:https://stackoverflow.com/a/4108764/1838970
现在,问你的问题。实现此比较器:
public class CarComparatorByName implements Comparator<Car> {
public int compare(Car o1, Car o2) {
return o1.getName().compareTo(o2.getName());
}
}
现在使用Comparator
:
Set<Car> cars = new TreeSet<Car>(new CarComparatorByName());
TreeSet
现在将使用您创建的比较器。
或者,如下面的评论中所述,您可以将Car
保留为Comparable
,并在创建时将它们放入TreeSet
。 TreeSet
Car implements Comparable
将使用{{1}}中定义的自然排序顺序。