【问题标题】:How to sort HashMap based on Date? [duplicate]如何根据日期对 HashMap 进行排序? [复制]
【发布时间】:2012-01-08 01:21:27
【问题描述】:

我试图根据键中的日期对这个 HashMap 进行排序

我的哈希图:

Map<Date, ArrayList> m = new HashMap<Date, ArrayList>();

【问题讨论】:

  • #winces# 如果您没有以不可变的方式使用那些Dates,我会小心尝试在多线程环境中使用它 - 调用任何对象@ 987654323@ 方法实际上改变了它持有的值,因此实际值取决于(不仅)set()s get()s 的顺序。我宁愿相信 JodaTime 库...

标签: java sorting hashmap date-sorting


【解决方案1】:

使用TreeMap 代替HashMap。由于Date 已经实现了Comparable,它会在插入时自动排序。

Map<Date, ArrayList> m = new TreeMap<Date, ArrayList>();

或者,如果您有一个现有的HashMap 并希望基于它创建一个TreeMap,请将其传递给构造函数:

Map<Date, ArrayList> sortedMap = new TreeMap<Date, ArrayList>(m);

另见:

【讨论】:

  • 如果我在日期上实现排序,上述方法将根据一年中的第一天对它们进行排序。虽然我想要基于当前日期的排序,但我必须实现一个比较器。有标题吗?
  • @Pirate:它是按时间戳排序的(Date#getTime() 提供),而不是一年中的第一天。更重要的是,java.util.Date 没有像“一年中的第一天”这样的概念。您的问题是在其他地方引起的。也许Date 用作键的实例是通过java.util.Calendar 以错误的方式创建的,它确实具有“一年中的第一天”的概念。只需按下右上角的“”按钮和 SSCCE 即可获得答案。
  • 所以你的意思是它是根据当前日期排序的?
  • @Pirate:它按时间戳排序,而不是您暗示的一年中的第一天。所以它不是例如1 Jan 2012, 1 Jan 2013, 2 Jan 2012, 2 Jan 2013,但它是1 Jan 2012, 2 Jan 2012, 1 Jan 2013, 2 Jan 2013
  • 意味着我不必实现比较器,但是由于这些日期值存储为键,它们是否需要是唯一的?我即将找到这一切,写一个SSCCE。
【解决方案2】:

使用TreeMap代替HashMap来存储数据,会自动排序。

【讨论】:

  • 欢迎来到 Stack Overflow!只是好奇,你为什么要重复一个已经给出的答案?这不是一种“讨论论坛”,人们通常会通过重复更多或其他内容来确认答案。在问答网站上,您只需投票或发布更好的答案。另请参阅stackoverflow.com/faq
  • 是的,我明白了。我会做得更好。
猜你喜欢
  • 2020-01-31
  • 1970-01-01
  • 2012-10-06
  • 2015-03-31
  • 2021-11-29
  • 2014-05-13
  • 2015-12-04
  • 2011-03-05
  • 1970-01-01
相关资源
最近更新 更多