簡體   English   中英

使用Comparable接口的匿名內部類

[英]Anonymous inner class using Comparable interface

當我嘗試使用可比接口創建匿名內部時,出現編譯錯誤。

//Code trying to create treeset using comparable
// compilation error
 TreeSet<String> treeSet5 = new TreeSet<String>(new Comparable<String>() {
        @Override
        public int compareTo(String o) {
            // TODO Auto-generated method stub
            return 0;
        }
    });
  // CE:The constructor TreeSet<String>(new Comparable<String>(){}) is undefined

我知道對於自定義排序,我們需要使用比較器,但是我很好奇為什么我們不能創建可比較的匿名類。

//Custom sorting: default sorting as String implements comparable
// below code is fine as its working as expected.
    TreeSet<String> treeSet2 = new TreeSet<String>(new Comparator<String>() {

        @Override
        public int compare(String o1, String o2) {
            return o2.compareTo(o1);

        }
    });

可比用於創建可以與自己進行比較的類。

比較器將與未實現Comparable的類一起使用(無論出於何種原因,例如,來自第三方),或者您要與原始的compareTo()方法進行比較而不比較它們而不繼承它們。

希望對您有意義。

這是精心制作的示例: https : //www.geeksforgeeks.org/comparable-vs-comparator-in-java/

  1. 可以通過比較兩個實體來完成排序。
  2. TreeSet類的Util類進行排序需要Comparator因為它具有兩個可以比較的參數。
  3. Comparable沒有足夠的信息來與其他元素進行比較。

問:現在,您將問當Sorting Item實現Comparable時它如何工作?

答:在這種情況下,排序項目是要與之進行比較的第一個項目,其他元素傳遞給其方法compareTo(String o)

實際上,一旦我看到TreeSet API,我就會在下面意識到。

上面的錯誤是因為TreeSet不接受Comparable接口作為構造函數參數,它只接受帶有實現的Comparator接口。

Treeset treeSet=new TreeSet();
//Creates empty tree set. All objects are inserted according to natural sorting order.
Treeset treeSet=new TreeSet(Comparator c);
//Creates empty treeSet object, objects are maintained according to defined Comparator.
TreeSet treeSet = new TreeSet(Collection c)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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