获取TreeMap的最后3个值

时间:2011-08-03 15:11:58

标签: java treemap

我有一个Date / String 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 }

任何帮助?

6 个答案:

答案 0 :(得分:4)

看起来你想要迭代descendingMap()

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

控制台:

Fri Sep 02 11:39:05 EDT 2011=57!!
Thu May 05 11:39:05 EDT 2011=38,9
Fri Apr 01 11:39:05 EDT 2011=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");

答案 1 :(得分:1)

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++
}

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

        //Do something

        if(i++ > 2){
            break;
        }
    }

答案 4 :(得分:0)

  • TreeMap实现了NavigableMap。
  • NavigableMap.descendingMap()。
  • 降序Map.entrySet()。iterator()//前三个条目当然是 “最后3”因为它回到了前面。

你可以实现Comparator并将其传递给TreeMap,这样“最早的”日期就在TreeMap的头部。

答案 5 :(得分:-1)

TreeMap to Array并使用for循环读取数组,条件为i&lt; 3