如何对具有字符串的hashmap进行排序

时间:2012-08-24 10:04:02

标签: java hashmap

我有一个Hashmap,其中包含以下内容

{20/02/2012=20/02/2012, 16/02/2012=16/02/2012}但这是一个字符串(键和值)。

请帮我看看如何根据月份和日期对它们进行排序,

ex : 16/02/2012=16/02/2012,20/02/2012=20/02/2012

我建议你没事。

由于

5 个答案:

答案 0 :(得分:1)

您需要实现自定义比较器并将它们存储在 TreeMap

例如(使用joda-time):

 class MyComparator implements Comparator<String> {
      @Override
      public int compare(String value1, String value2) {
          LocalDate date1 = LocalDate.parse(value1, DateTimeFormat.forPattern("dd/MM/yyyy"));
          LocalDate date2 = LocalDate.parse(value2, DateTimeFormat.forPattern("dd/MM/yyyy"));
          return date1.compareTo(date2);
      }
 }


 TreeMap<String, String> treeMap = new TreeMap<String,String>();
 treeMap.put("20/02/2012", "20/02/2012");
 treeMap.put("16/02/2012","16/02/2012");
 System.out.println(treeMap);

但是你绝对应该在你的地图中存储日期而不是String,如果你不能改变它,使用上面的方法。

答案 1 :(得分:1)

如果可能,请将您的日期存储为yyyy / MM / dd(例如2012/02/16)并使用SortedSet

答案 2 :(得分:1)

  1. 首先不要将日期存储为字符串,将它们存储为日期。
  2. 然后,您可以使用TreeMap自动为您排序日期(键)。
  3. 如果您的所有密钥都等于相应的值,您还可以使用TreeSet

答案 3 :(得分:1)

正如大家所说,在排序集中使用Date个对象会更容易。使用

从字符串转换为日期
new SimpleDateFormat("dd/MM/yyyy").parse(input);

答案 4 :(得分:1)

我只是补充说HashMaps没有保留顺序,HashMaps使用键的哈希码将条目放在一个数组中,这样你就不会使用任何类型的排序算法,你应该使用它取而代之的是TreeMap或任何其他可排序地图实现