如何根据日期对 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# 如果您没有以不可变的方式使用那些Dates,我会小心尝试在多线程环境中使用它 - 调用任何对象@ 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 进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何根据日期对“MMM YYYY”日期字符串进行排序? [复制]

按日期对 HashMap 进行排序

根据值然后键对HashMap进行排序? [复制]

如何根据添加到画廊的日期在 Swift 中对照片进行排序

如何根据日期对SQL Server中的多个列进行排序

如何在Java中对HashMap进行排序[重复]