1

我有一个日期/字符串 TreeMap,我想遍历最后 N 个条目。

TreeMap<Date,String> map = new TreeMap<Date,String>();
map.put(new Date(2011,1,1), "32,1");
map.put(new Date(2011,3,1), "35");
map.put(new Date(2011,4,5), "38,9");
map.put(new Date(2011,8,2), "57!!");

然后我迷路了。我发现了这个:

NavigableSet<Date> dates = donnees.descendingKeySet();

然后我不知道怎么说:

for(key in dates and i ; i from 0 to N)
{ do something }

有什么帮助吗?

4

6 回答 6

5

看起来您想要迭代descendingMap()

private static final int N = 3;
...
int i = 0;
for (Map.Entry entry : map.descendingMap().entrySet()) {
    if (i++ < N) {
        System.out.println(entry);
    }
}

安慰:

2011 年 9 月 2 日星期五 11:39:05 EDT=57!!
美国东部时间 2011 年 5 月 5 日星期四 11:39:05=38,9
2011 年 4 月 1 日星期五 11:39:05 EDT=35

Calendar附录:这是在默认语言环境中使用的示例:

private static Date createDate(int year, int month, int day) {
    Calendar calendar = Calendar.getInstance();
    calendar.set(year, month, day);
    return calendar.getTime();
}
...
map.put(createDate(2011, 5, 3), "3-Jun-2011");
于 2011-08-03T15:43:20.440 回答
2
int i=0;
for(Iterator<Date> it = dates.iterator(); it.hasNext() && i<3;) {
  Date date = it.next();
  doSomething();
  i++
}

或同等学历):

int i=0;
Iterator<Date> it = dates.iterator();
while(i<3 && it.hasNext()) {
  Date date = it.next();
  doSomething();
  i++
}
于 2011-08-03T15:14:37.877 回答
1

你关心树的状态吗?如果没有,那么你可以做pollLastEntry()。这将从树上删除最后一个条目并将其提供给您。做3次,你就完成了。或者您可以将树展平为 arrayList 并返回最后 3 个元素。

于 2011-08-03T15:15:49.247 回答
0

听起来您只需要遍历前三个项目:

    int i=0;
    for(Date date: dates){

        //Do something

        if(i++ > 2){
            break;
        }
    }
于 2011-08-03T15:18:55.083 回答
0
  • TreeMap 实现了 NavigableMap。
  • NavigableMap.descendingMap()。
  • 降序 Map.entrySet().iterator() // 前 3 个条目当然是“最后 3 个”,因为它是从后到前的。

您可以只实现 Comparator 并将其传递给 TreeMap,以便“最旧”的日期位于 TreeMap 的开头。

于 2011-08-04T00:51:18.813 回答
-1

TreeMap 到数组并使用条件 i < 3 的 for 循环读取数组

于 2011-08-03T15:14:49.247 回答