-2

可能重复:
TreeMap sort by value
Map 可以按值的顺序迭代

我有一个 TreeMap 类型<String, Date>。我想按日期对它进行排序(最近的在前),我不能将它们用作键,因为我不能保证它们是唯一的。有没有办法做到这一点?

4

2 回答 2

5

不能直接做,可以做的是将集合的内容复制到一个新的,然后排序,例如:

List<Map.EntrySet<String, Date>> copy = new ArrayList<Map.EntrySet<String, Date>>(treeMap.entrySet());
Collections.sort(copy, new CustomComparator());

class CustomComparator implements Comparator<Map.Entry<String,Date>> {
  public int compareTo(Map.Entry<String,Date> e1, Map.Entry<String,Date> e2) {
    // compare your dates
  }
}

当然,这个集合不会与原始集合同步,因此每次TreeSet修改原始集合时都必须重新进行。

于 2012-12-12T17:33:51.783 回答
1

实际上,如果你真的想要的话,你可以在 TreeMap 中有重复的键

    Map<Date, String> map = new TreeMap<Date, String>(new Comparator<Date>() {
        @Override
        public int compare(Date d1, Date d2) {
            return d1.after(d2) ? 1 : -1;
        }
    });
    Date d1 = new Date(-100000000000L);
    Date d2 = new Date(100000000000L);
    map.put(d2, "s1");
    map.put(d1, "s2");
    map.put(d1, "s3");
    System.out.println(map);

输出

{Mon Oct 31 16:13:20 EET 1966=s3, Mon Oct 31 16:13:20 EET 1966=s2, Sat Mar 03 11:46:40 EET 1973=s1}

请注意,2 个条目具有相同的键,并且输出按您想要的日期排序

于 2012-12-12T17:47:17.317 回答