※ 引述《Neisseria (Neisseria)》之銘言:
: 其實我 C++ 不熟哩 我也是 copy 程式碼來的 呵呵
: 不過不知為何 大大的方式我試過還是不能使用
略看上篇,回文裡的只是給你一個 idea, 並不是真的能跑的 code.
: 我後來試了另一種方式 就是自己實做 Comparator
多事說幾句, 你這裡的 Comparator 是多餘的
: 然後丟到 sort 函式裡面 這樣就可以跑了
: public static <T extends Comparable<? super T>>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
你這裡限制了 T 一定要是 Comparable
: void ascending_sort(List<T> list) {
^^^^^^^^^^^^^^^ ^^^^^^^^
(留心 Java 的命 換而言之,傳進的一定是
名 convention) List of Comparable
: Comparator<T> comp = new Comparator<T>(){
[43]
: };
: sort(list, comp);
: }
既然已經是 List of Comparable, 直接用
Collections.sort(list)
就行了。
提供 Comparator 的目的在於:
1) type 本身並不是 Comparable,或
2) 你想排序的方法與 type 的 compareTo 的比較方式不同。
: 不過如果是在 main 函式的話 就不能用這個方法
: 所以只好用一個 ascending_sort 函式包裝起來
: 如果希望 list 呈降冪排列 只要改 Comparator 的正負號即可
: 以上就是一點小心得 謝謝各位大大的指教
要是你已經限制傳進的一定要是 Comparable 的 list (像你上面
做的), 要做 decending sort,你的 comparator 甚至可以簡化成:
class DecendingComparator<T extends Comparable<? super T>> {
@Override
public int compare(T o1, T o2) {
return -(o1.compareTo(o2));
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 223.19.45.228