我正在尝试获取集合中的最后一个date元素,但是它一直返回第一个?

时间:2018-10-17 16:57:26

标签: java loops iterator set key

下面是我的代码,我获取了Map的键,然后遍历它们以获取最后的日期,但是它似乎没有得到最后的日期。此行Set<Date> keys = date.keySet();上的值是10.31.18和11.17.18。我希望lastDate等于11.17.18,但等于10.31.18。任何想法我在这里做错了。

Map<Date, List<Integer>> date = date(dates, noPupils);
                Set<Date> keys = date.keySet();
                for (Iterator<Date> it = keys.iterator(); it.hasNext();) {
                    while (it.hasNext()) {
                        Date lastDate = it.next();

2 个答案:

答案 0 :(得分:1)

似乎您遵循了此answer。它已经说:

  

Collection不一定是有序集

在您的情况下,它because不起作用

  

映射的顺序定义为迭代器在其上的顺序   地图的集合视图返回其元素。一些地图   像TreeMap类这样的实现会在   按照他们的命令;其他类,例如HashMap类。

显然Map date不能保证特定的顺序。这也适用于Set<Date> keys = date.keySet() as this

  

返回此映射中包含的键的Set视图...是   以地图为后盾...

但是解决方案很简单,并且是开箱即用的

Date lastDate = Collections.max(keys);

这是因为Date实现了Comparable

答案 1 :(得分:0)

您使用的是LinkedHashMap还是HashMap?

HashMap未排序。 LinkedHashMap是有序地图,保留插入顺序。

但是我认为您应该使用TreeSet来对日期进行排序。因此,您无需关心哪种Map:)