簡體   English   中英

Java中使用比較器錯誤的TreeMap構造函數

[英]TreeMap Constructor using comparator error in Java

我想制作一個TreeMap,以便每次在TreeMap中插入一個條目時-該條目將根據運行時的值進行排序。 (需要O(logN)時間。)因此,我定義了一個TreeMap及其構造函數,如下所示:::我不明白問題出在哪里……我很困惑。 誰能解釋這個錯誤/問題嗎?

代碼::

Map<String,Integer> tm = 
  new TreeMap<String,Integer>(new Comparator<Map.Entry<String,Integer>>(){

        @Override
        public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
            throw new UnsupportedOperationException("Not supported yet."); // implement logic here
        }
    });

比較器是關鍵

Map<String,Integer> tm =
                    new TreeMap<String,Integer>(new Comparator<String>(){
                        @Override
                        public int compare(String o1, String o2) {
                            throw new UnsupportedOperationException("Not supported yet."); // implement logic here
                        }
                    });

您應該根據條目的鍵對條目進行排序。 因此,比較器應在此處比較兩個字符串。 (new Comparator(){...}),如此處其他答案所建議。

看看構造函數文檔: http : //docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html#TreeMap(java.util.Comparator)

如果確實需要按值排序,則應為鍵創建一個新對象,其中也包含您的值:

class MyKey {
    String str;
    Integer i;
    ...
}
Map<MyKey,Integer> tm = new TreeMap<MyKey, Integer>(new Comparator<MyKey>(){
    @Override
    public int compare(MyKey o1, MyKey o2) {
         String str1 = o1.str;
         String str2 = o2.str;
         // implement logic here
    }
};

您需要提供比較器,它比較鍵,而不是完整的映射條目。 因此,要創建TreeMap<String,X>X是任何類型),您需要提供Comparator<String> 可以這樣完成:

Map<String,Integer> tm = new TreeMap<String,Integer>(new Comparator<String>(){
                        @Override
                        public int compare(String o1, String o2) {
                            // implement logic here
                            // sample implementation below 
                            return o1.comparateTo(o2)
                        }
                    });

如果對字符串進行自然排序(請參閱: javadoc中的String#compareTo)適合您,則可以編寫:

Map<String,Integer> tm = new TreeMap<String,Integer>();

請注意,在兩種情況下,鍵的順序都是相同的。 在這兩種情況下,都使用String#compareTo方法比較鍵。 僅在第一個示例中,我們顯式提供了比較器,而在第二個示例中,我們使用String實現Comparable的事實。

暫無
暫無

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

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