是一个Java方法,它使用一个参数来接收HashMap<;字符串,整数>;和HashMap<;长整数>;可能的

是一个Java方法,它使用一个参数来接收HashMap<;字符串,整数>;和HashMap<;长整数>;可能的,java,hashmap,Java,Hashmap,我想创建一个方法,该方法将按键对HashMap进行排序。HashMap的键可以是String或Long。这两种HashMap类型的处理是相似的。为了避免代码重复,我想创建一个方法来处理这两种情况 方法的代码: static LinkedHashMap<Long, Integer> sortNumberHashMapByKey(HashMap<Long, Integer> map){ ArrayList<Long> keys = new Arra

我想创建一个方法,该方法将按键对HashMap进行排序。HashMap的键可以是String或Long。这两种HashMap类型的处理是相似的。为了避免代码重复,我想创建一个方法来处理这两种情况

方法的代码:

static LinkedHashMap<Long, Integer> sortNumberHashMapByKey(HashMap<Long, Integer> map){
        ArrayList<Long> keys = new ArrayList<>(map.keySet());
        ArrayList<Integer> values = new ArrayList<>(map.values());
        Collections.sort(keys);
        Collections.sort(values);
        LinkedHashMap<Long, Integer> sortedMap = new LinkedHashMap<>();

        for (Integer value : values) {
            Iterator<Long> keyIt = keys.iterator();
            while (keyIt.hasNext()){
                Long key = keyIt.next();
                if (map.get(key).equals(value)){
                    keyIt.remove();
                    sortedMap.put(key, value);
                    break;
                }
            }
        }
        return sortedMap;
    }
静态LinkedHashMap sortNumberHashMapByKey(HashMap映射){
ArrayList keys=新的ArrayList(map.keySet());
ArrayList values=新的ArrayList(map.values());
集合。排序(键);
集合。排序(值);
LinkedHashMap sortedMap=新LinkedHashMap();
for(整数值:值){
迭代器keyIt=keys.Iterator();
while(keyIt.hasNext()){
Long key=keyIt.next();
if(map.get(key).equals(value)){
keyIt.remove();
分类地图输入(键、值);
打破
}
}
}
返回分拣的DMAP;
}

有没有可能用一个参数创建一个Java方法,该参数可以同时接收
HashMap
HashMap
类型的值?

您可以引入一个
T
,它需要实现
compariable
,然后用
T
替换
Long
的任何用法:

static <T extends Comparable<T>> LinkedHashMap<T, Integer> sortNumberHashMapByKey(HashMap<T, Integer> map){
    ArrayList<T> keys = new ArrayList<>(map.keySet());
    ArrayList<Integer> values = new ArrayList<>(map.values());
    Collections.sort(keys);
    Collections.sort(values);
    LinkedHashMap<T, Integer> sortedMap = new LinkedHashMap<>();

    for (Integer value : values) {
        Iterator<T> keyIt = keys.iterator();
        while (keyIt.hasNext()){
            T key = keyIt.next();
            if (map.get(key).equals(value)){
                keyIt.remove();
                sortedMap.put(key, value);
                break;
            }
        }
    }
    return sortedMap;
}
静态LinkedHashMap sortNumberHashMapByKey(HashMap映射){
ArrayList keys=新的ArrayList(map.keySet());
ArrayList values=新的ArrayList(map.values());
集合。排序(键);
集合。排序(值);
LinkedHashMap sortedMap=新LinkedHashMap();
for(整数值:值){
迭代器keyIt=keys.Iterator();
while(keyIt.hasNext()){
T key=keyIt.next();
if(map.get(key).equals(value)){
keyIt.remove();
分类地图输入(键、值);
打破
}
}
}
返回分拣的DMAP;
}

您可以在java中使用
泛型
来定义一个适用于特定类型e.i.的方法。在您的情况下,Sting和Long(两者都具有可比性)代码将如下所示:

static <E extends Comparable<E>> LinkedHashMap<E, Integer> sortNumberHashMapByKey(HashMap<E, Integer> map){
    ArrayList<E> keys = new ArrayList<>(map.keySet());
    ArrayList<Integer> values = new ArrayList<>(map.values());
    Collections.sort(keys);
    Collections.sort(values);
    LinkedHashMap<E, Integer> sortedMap = new LinkedHashMap<>();

    for (Integer value : values) {
        Iterator<E> keyIt = keys.iterator();
        while (keyIt.hasNext()){
            E key = keyIt.next();
            if (map.get(key).equals(value)){
                keyIt.remove();
                sortedMap.put(key, value);
                break;
            }
        }
    }
    return sortedMap;
}
静态LinkedHashMap sortNumberHashMapByKey(HashMap映射){
ArrayList keys=新的ArrayList(map.keySet());
ArrayList values=新的ArrayList(map.values());
集合。排序(键);
集合。排序(值);
LinkedHashMap sortedMap=新LinkedHashMap();
for(整数值:值){
迭代器keyIt=keys.Iterator();
while(keyIt.hasNext()){
E key=keyIt.next();
if(map.get(key).equals(value)){
keyIt.remove();
分类地图输入(键、值);
打破
}
}
}
返回分拣的DMAP;
}

这里的
是您希望传递给方法的类型。然后在代码中使用此类型的
E
来执行
String
Long
所共有的操作。是的,您可以使用
泛型