[英]Best way to sort a Set?
我有一堂課代表汽車:
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?
這是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
實例中,它們就會為您排序。
在Car
使用Comparator
而不是Comparable
。 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
創建一個TreeSet:
Set<Car> cars = new TreeSet<Car>(new CarComparatorByName());
該TreeSet
現在將使用您創建的比較器。
另外,如下面的評論所述,您可以將Car
保持為可Comparable
並在創建時將它們簡單地放入TreeSet
。 該TreeSet
將使用Car implements Comparable
定義的自然排序順序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.