簡體   English   中英

排序集合的最佳方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM