试图通过相应地更改键和值来对地图进行排序?

时间:2017-07-16 19:44:27

标签: java collections

您好我正在尝试通过地图排序我确信有很多方法但我想按照自己的方式但由于某种原因我的程序无法正常工作:( 这是代码:

import java.util.*;
public class Program {
public static Map<Integer,String> sortMap(Map<Integer,String> m){
    Set<Integer> ll = new HashSet<>(m.keySet());
    Integer[] num = ll.toArray(new Integer[ll.size()]);
    List<Integer> l = new ArrayList<>(ll);
    Collections.sort(l);
    Map<Integer,String> newMap = new HashMap<>();
    for(int i=0; i<l.size(); i++){
    for(int j=i+1; j<ll.size(); j++){
        if(l.get(i) == num[j]){
            newMap.put(l.get(i), m.get(num[j]));
            break;
        }
    }
    }
    System.out.println(l);
    return newMap;
}
public static void main(String[] args) {
    HashMap<Integer,String> hm = new HashMap<>();
    //Random Data Code
    hm.put(666, "Zebra");
    hm.put(555, "Yolo");
    hm.put(444, "Micky you so fine!");
    hm.put(333, "You Blow My Mind");
    hm.put(222, "Apple");
    hm.put(111, "Hey Mickey!");
    Map<Integer,String> m = sortMap(hm);
    // Printing the sorted Map
    for(Map.Entry<Integer, String> a : m.entrySet()){
        System.out.println(a.getKey() + ":" + a.getValue());
    }
}

}

控制台用于打印从小id到大id的有序映射,但它打印

333:You Blow My Mind
222:Apple
111:Hey Mickey!

我真的感谢你的帮助。 感谢

1 个答案:

答案 0 :(得分:1)

您无法对HashMap进行排序。地图或集合中根本没有订单概念。您可以使用LinkedHashMap - 至少保留插入顺序的跟踪。

但更好的方法是退后一步并在此处使用列表。您可以创建一个包装类来保存当前存储在映射中的那对键/值对象 - 然后实现Comparable接口或创建Comparator以使用java.util.Collections提供的sort方法。 / p>