如何对HashMap键进行排序

Nav*_*n A 11 java hashmap

我有一个问题

HashMap<String, List<AppPrjMilestone>> dateMilestoneMap
                                 = new HashMap<String, List<AppPrjMilestone>>();
Run Code Online (Sandbox Code Playgroud)

我将动态键放在Hashmap对象中,如下所示:

dateMilestoneMap.put(""+crateDate,value);
Run Code Online (Sandbox Code Playgroud)

最后我得到这样的结果:

("28/01/2012",value)
("01/01/2012",value)
("26/01/2012",value)
Run Code Online (Sandbox Code Playgroud)

我希望以desc或asc顺序返回键值对.我怎样才能做到这一点?

all*_*eek 25

根据定义,HashMaps不存储键的排序顺序.但是,您可以通过以下方式获取键的数组来实现此目的:Object[] keys = map.keySet().toArray();然后使用Arrays对列表进行排序:Arrays.sort(keys);最后迭代每个键并从HashMap中检索值.

for(Object key : keys) { System.out.println(map.get(key)); }

这里的排序步骤将使算法在O(n lg n)而不是O(n)中运行,这可以使用排序数据结构.

这将按字典顺序对列表进行排序.由于您的问题看起来像是使用常见的美国日期格式,因此将按日,月和年终对列表进行排序.这可能不太正确.您可以使用日期的年,月,日字符串格式,也可以采用更合适的密钥对象.Joda-Time的DateTime和DateTimeComparator非常有用.在调用时,只需使用DateTime作为键和DateTimeComparator实例Arrays.sort(keys, comparator);.