我是Java新手。我正在实现比较器接口,我在下面有一个比较功能:-
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
类型铸造?
有人请给我一个参考,以便我弄清楚。谢谢。
编辑:-这是我的整个班级,我有一个哈希图我想使用泛型类按值排序,因此编写了这个类
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;
}
}
我在这里考虑,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类,它实现了Entry接口,该接口写在Map接口中。 所以有使用内部类引用的规则。
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;
}
}