什么是可比类型转换和地图输入?



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

相关内容

  • 没有找到相关文章

最新更新