我是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 我想使用Generic类对值进行排序,因此编写此类
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;
}
}
答案 0 :(得分:2)
我在这里考虑,K,V都是字符串值。如果您有其他值,那么首先您的K,V类应遵循equals()
和hashcode()
规则。
如果您遵循以下程序,则不需要可比较。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class SortMap {
public Map<String, String> getSortedMap(Map<String, String> mapToSort) {
Set<Map.Entry<String,String>> mapEntry = mapToSort.entrySet();
List<Map.Entry<String,String>> listMap= new ArrayList<Map.Entry<String,String>>();
listMap.addAll(mapEntry);
Collections.sort(listMap, new Comparator<Map.Entry<String,String>>() {
@Override
public int compare(Map.Entry<String,String> o1, Map.Entry<String,String> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
Map<String,String> sortedMap = new LinkedHashMap<String,String>();
for(Map.Entry<String,String> mapE:listMap)
{
sortedMap.put(mapE.getKey(), mapE.getValue());
}
System.out.println(sortedMap);
return sortedMap;
}
}
Map.Entry 只是在 HashMap 类中编写的 Entry 类,它实现了条目接口在地图界面内。所以有规则使用内部类引用。
static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
Entry<K,V> next;
final int hash;
/**
* Creates new entry.
*/
Entry(int h, K k, V v, Entry<K,V> n) {
value = v;
next = n;
key = k;
hash = h;
}
}