如何根据日期对 HashMap 进行排序? [复制]
Posted
技术标签:
【中文标题】如何根据日期对 HashMap 进行排序? [复制]【英文标题】:How to sort HashMap based on Date? [duplicate] 【发布时间】:2012-01-08 01:21:27 【问题描述】:我试图根据键中的日期对这个 HashMap 进行排序
我的哈希图:
Map<Date, ArrayList> m = new HashMap<Date, ArrayList>();
【问题讨论】:
#winces# 如果您没有以不可变的方式使用那些Date
s,我会小心尝试在多线程环境中使用它 - 调用任何对象@ 987654323@ 方法实际上改变了它持有的值,因此实际值取决于(不仅)set()
s 和 get()
s 的顺序。我宁愿相信 JodaTime 库...
【参考方案1】:
使用TreeMap
代替HashMap
。由于Date
已经实现了Comparable
,它会在插入时自动排序。
Map<Date, ArrayList> m = new TreeMap<Date, ArrayList>();
或者,如果您有一个现有的HashMap
并希望基于它创建一个TreeMap
,请将其传递给构造函数:
Map<Date, ArrayList> sortedMap = new TreeMap<Date, ArrayList>(m);
另见:
Java tutorials - Map implementations Java tutorials - Object ordering【讨论】:
如果我在日期上实现排序,上述方法将根据一年中的第一天对它们进行排序。虽然我想要基于当前日期的排序,但我必须实现一个比较器。有标题吗? @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!只是好奇,你为什么要重复一个已经给出的答案?这不是一种“讨论论坛”,人们通常会通过重复更多或其他内容来确认答案。在问答网站上,您只需投票或发布更好的答案。另请参阅***.com/faq。 是的,我明白了。我会做得更好。以上是关于如何根据日期对 HashMap 进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章