【发布时间】:2014-04-04 07:37:13
【问题描述】:
我是 Java 新手。 我正在实现 Comparator 接口,并且我在下面有一个 compareTo 函数:-
public int compare(Object o1, Object o2) {
Map.Entry e1 = (Map.Entry) o1;
Map.Entry e2 = (Map.Entry) o2;
return ((Comparable) e1.getValue()).compareTo(e2.getValue());
}
我无法理解这条线是什么意思
Map.Entry e1 = (Map.Entry) o1;
两个Map.Entry有什么用??
为什么Comparable 在类型转换中??
有人请给我一个参考,以便我弄清楚。 谢谢。
编辑:- 这是我的整个班级,我有一个 HashMap 我想使用通用类按值排序,因此编写了这个类
package via;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class SortMap<K, V> {
public Map<K, V> getSortedMap(Map<K, V> mapToSort) {
List<Map.Entry> list = new ArrayList<Map.Entry>(mapToSort.entrySet());
Collections.sort(list, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Map.Entry e1 = (Map.Entry) o1;
Map.Entry e2 = (Map.Entry) o2;
return ((Comparable) e2.getValue()).compareTo(e1.getValue());
}
});
Map sortedMap = new LinkedHashMap();
for(Iterator i=list.iterator();i.hasNext();)
{
Map.Entry entry=(Map.Entry)i.next();
sortedMap.put(entry.getKey(), entry.getValue());
}
System.out.println(list);
return sortedMap;
}
}
【问题讨论】:
-
你能发布完整的课程吗?你应该实现参数化的
Comparator而不是原始类型。 -
看起来你正在实现 raw
Comparator接口 - 有什么理由你没有将它实现为Comparator<Map.Entry<String, String>>或其他什么? -
正如我之前提到的,我是 Java 新手,所以不知道这里发生了什么。我对此一无所知。
-
如果您是 Java 新手,请尝试一些简单的比较器/可比较示例。谷歌上有很多。
-
@T.J.Crowder 我想比较 Map.Entry 实例。
标签: java interface compare comparator compareto