hashmap<>对key进行排序

可以里面存放的是String类型的
2015-06-01 这样日期的数据
输出的时候 想要
2015-06-07
2015-06-08
2015-06-09
2015-06-10
2015-06-11
2015-06-12
2015-06-13
这样按日排序的数据
但是输出的时候却是
2015-06-10
2015-06-11
2015-06-12
2015-06-13
2015-06-07
2015-06-08
2015-06-09
请问 各位大神 有什么方法可以解决这个问题么??
Map<String,Integer>
对key 进行排序

1,如果是只针对key排序,完全不考虑value顺序,则排序如下:

Map<String, Integer> map = new HashMap<String, Integer>();
  map.put("2015-06-10", 3);
  map.put("2015-06-09", 2);
  map.put("2015-06-08", 1);
  map.put("2015-06-11", 4);
  List<String> ll = new ArrayList<>(map.keySet());
  Collections.sort(ll);
  System.out.println(ll.toString());

ll就是key排序后的集合,其实根据排序后的key去map中取值就可以了

2,如果对key排序,同时value也相应的根据key排序呢变化,则排序如下

Map<String, Integer> map = new HashMap<String, Integer>();
  map.put("2015-06-10", 3);
  map.put("2015-06-09", 2);
  map.put("2015-06-08", 1);
  map.put("2015-06-11", 4);
  List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
  Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
      public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
          return (o1.getKey()).toString().compareTo(o2.getKey());
      }
  });
  System.out.println(list.toString());

list就是map根据key排序后的结果

追问

大神 不行啊 还是这种排序
2015-06-10
2015-06-11
2015-06-12
2015-06-13
2015-06-07
2015-06-08
2015-06-09

温馨提示:内容为网友见解,仅供参考
无其他回答

hashmap<>对key进行排序
1,如果是只针对key排序,完全不考虑value顺序,则排序如下:Map<String, Integer> map = new HashMap<String, Integer>(); map.put("2015-06-10", 3); map.put("2015-06-09", 2); map.put("2015-06-08", 1); map.put("2015-06-11", 4); List<String> ll = new Arra...

HashMap & HashSet 的key“自动排序”问题
综上所述,所谓 key 的“自动排序”其实是由 hash 函数决定的存储顺序所造成的视觉效果,而非真正的排序。若需按照输入的顺序输出 key,可选择使用 LinkedHashMap,它能够记住插入顺序。如需根据 key 自定义排序,推荐使用 TreeMap,它基于红黑树实现,支持排序。至于根据 value 进行排序,则需要先将数...

如何对hashmap按键值排序
1. HashMap存储每对键和值作为一个Entry<K,V>对象。例如,给出一个HashMap,[html] view plain copy print?Map<String,Integer> aMap = new HashMap<String,Integer>();键的每次插入,都会有值对应到散列映射上,生成一个Entry <K,V>对象。通过使用这个Entry <K,V>对象,我们可以根据值来...

hashmap treemap哪些是线程安全的
您好,hashmap treemap 都是非线程安全的,currenthashmap, hashTable 是线程安全的,希望有帮到您。

关于java中HasMap的遍历输出不按顺序
第一种:能顺序遍历就用ArrayList第二种:先把hashMap的key 拿出来 然后把key 排序,通过HashMap的get(String key) 方法取出值 就好了

如何对HashMap中的元素进行排序
{HashMap<String, Integer> map = new HashMap<>();map.put("lucy", 76);map.put("tom", 92);map.put("jack", 86);\/\/ 按照 Key (名字)进行排序 ,并打印map.entrySet().stream().sorted((e1, e2) -> e1.getKey().compareTo(e2.getKey())).forEach(System.out::println);...

hashset hashmap是有序的吗?
首先,HashSet 和Hashmap分别是Set接口和Map接口的实现类,运用哈希算法来存取元素,也就是它们中的对象不按特定方式排序;但如果要实现对Set和Map的排序,要用到这2个接口的另外2个实现类,TreeSet和TreeMap, 对TreeSet的排序,要求存取到其中的对象要覆盖 equals(Object obj) ,hashcode() 方法,还要...

Java中的HashMap加入元素时,是否可以根据自己定义的顺序加入元素得到自 ...
首先HashMap是无序的,想要有序可以用TreeMap,加入元素后自行排序,但是Map是键值对,它就算排序也是按key排序的,和元素没关系,如果你期望的是元素的排序,建议使用TreeSet,建立TreeSet的时候指定一个comparator.如果确定可以使用TreeSet你可以追问,如果不用,HashMap不能排序这是你要的答案 ...

如何对Hashtable中的key关键字进行排序
String key) { return map.get(key); } public void put(String key, Object value) { map.put(key, value); } public void sort() { List list = new ArrayList(map.keySet()); Collections.sort(list, new Comparator()...

...= new HashMap<String, Object>(); 按 Key 排序
首先Map排序需要自己写一堆算法。其次HashMap是无序的,即使已经排序正确了,取值时也不一定就是按顺序取出的。所以直接排序存放是不可行的。但可以曲线救国的办法,通过Set<String> keys = map.keySet();取得map的key值集合,然后单独给keys来个排序就简单多了,然后按排序后的keys去遍历取值,就OK了...

相似回答