什么是可比类型铸造& Map.Entry的?

时间:2014-03-03 10:02:46

标签: java interface compare comparator compareto

我是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;
    }

}

1 个答案:

答案 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;
        }
}