[英]Treemap using Date as the Key Java
能够搜索TreeMap<Date, String>
的键的正确方法是什么TreeMap<Date, String>
例如NavigableMap<Date, String>
? 我希望在特定月份检查并输出那个月的所有人?
例如,如果它如下所示,我将如何能够搜索所有关键二月份的人?
Date date1 = dateformat.parse("8 January 2013");
如果使用NavigableMap
实现,则可以调用subMap
来获取两个键之间的映射视图:
DateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy");
//using TreeMap for example
NavigableMap<Date, String> stringsByDate = new TreeMap<Date, String>();
//populate map
Date jan15th = dateFormat.parse("15 January 2013");
Date feb12th = dateFormat.parse("12 February 2013");
Date feb24th = dateFormat.parse("24 February 2013");
Date march18th = dateFormat.parse("18 March 2013");
stringsByDate.put(jan15th, "foo");
stringsByDate.put(feb12th, "bar");
stringsByDate.put(feb24th, "baz");
stringsByDate.put(march18th, "qux");
//define "from" and "to" keys
Date feb1st = dateFormat.parse("1 February 2013");
Date march1st = dateFormat.parse("1 March 2013");
//get the specified view
NavigableMap<Date, String> febStringsByDate = stringsByDate.subMap(
feb1st,
true, //include Feb 1st
march1st,
false //don't include March 1st
);
//prints {Tue Feb 12 00:00:00 EST 2013=bar, Sun Feb 24 00:00:00 EST 2013=baz}
System.out.println(febStringsByDate);
如所示,调用subMap
使用的“from”和“to”键本身不需要包含在地图中。
注意:这仅适用于特定 2月的日期,例如2013年2月。如果您需要所有 2月日期的条目,则需要按年份进行迭代并合并结果。
首先,不推荐Date是可变的,并且使用可变对象作为Map中的键。
但要回答您的问题:您需要迭代地图中的键并根据给定的条件检查每个键。 您可以将Date包装到Calendar
类中,以使日,月,年和...比较更容易。
只是有同样的问题,花了一些时间来弄清楚它为什么不起作用。
它只是比较各个Date对象的哈希值,即使日期相同,它们也是不同的。
我试图使用以下数据结构
SortedMap<Date,List<String>>
但它不允许向该列表添加多个成员,因为即使已存在相同的日期,map.get(date)也始终返回null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.