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