获取大于0的int时,Map TreeMap项会返回null吗?

时间:2013-08-09 13:40:54

标签: java collections map

    Score.clear();
    for (Client player : getPlayers()) {
        Client c = (Client) player;
        Score.put(c.gameScore, c);
    }

    Client WINNER = Score.get(Score.size() - 1);
    if (WINNER != null) {
        System.out.println("it works.");
    }
    else {
        System.out.println("its a null");
    }

它应该做什么:

遍历所有客户端,然后将客户端的分数对象添加到Map集合(treemap)中。 然后找到得分最高的客户。

TreeMap集合从最低的int到最高的int,如下所示:( - 5,0,6,8,110,647)。

我尝试了当前的代码,当客户有0分(全部)时,它工作正常并输出“它工作。”。但是一旦我在其中一个客户中得到200分,就会说“它是空的”。

为什么它最终成为空?

public static Map<Integer, Client> Score = new TreeMap<Integer, Client>();

3 个答案:

答案 0 :(得分:5)

此:

Score.get(Score.size() - 1)

获取地图的最后一个条目,但是值为Score.size() - 1的键的值(如果有)。因此,它不起作用是正常的。

由于您使用TreeMap,这意味着它也是SortedMap。因此你可以这样做:

// declare the map
final SortedMap<Integer, Client> scores = new TreeMap<>();

// fill the map

// get the last entry
scrores.get(scores.lastKey());

请注意,您最好遵守Java约定:变量名称应以小写字母开头。

另一种方法是将SortedSet与自定义Comparator一起使用。

答案 1 :(得分:0)

仔细阅读: http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html

您需要的是lastEntry()

答案 2 :(得分:0)

Score.get(Score.size() - 1)

是你的错。 TreeMap.get的不是索引作为参数,而是键对象。