Key in TreeMap returning null

Итак, у меня очень странная ошибка. Я наткнулся на него, когда изначально использовал keySet() для итерации по первым 10 ключам большой TreeMap. Один из ключей возвращал null, что не должно быть возможным, насколько я понимаю. Поэтому я написал тестовый код ниже:

int i = 0;
        for (Map.Entry<String, Integer> es : sortedMap.entrySet()){
            if (i >= 10) {
                break;
            }

            if (sortedMap.containsKey(es.getKey())){
                System.out.println(es.getKey() + ":" + sortedMap.get(es.getKey()));
            } else {
                System.out.println("Key " + es.getKey() + " does not exist, yet...");
                System.out.println("This does work: " + es.getKey() + ":" + es.getValue());
                System.out.println("This does NOT work: " + es.getKey() + ":" + sortedMap.get(es.getKey()));
            }
            i++;
        }

И получил следующие результаты:

SOAP:967
'excerpt'::679
'type'::679
Key 'author_url': does not exist, yet...
This does work: 'author_url'::679
This does NOT work: 'author_url'::null
'date'::679
Android:437
TLS:295
message:283
server:230
monthly:215
<<<<<<<<<<<<<<<<<<<<DUMPING MAP!
{SOAP=967, 'excerpt':=679, 'type':=679, 'author_url':=679, 'date':=679, Android=437, TLS=295, message=283, server=230, monthly=215...

Я отрезал карту после первой десятки, так как там есть еще много чего, но все они являются ключами со значением.

Поэтому мой вопрос заключается в следующем: Почему я получаю null при использовании ключа для прямого get(key) из TreeMap, а EntrySet возвращает правильный ключ и значение?

Вот мой компаратор, поскольку я упорядочиваю на Integer:

class ValueComparator implements Comparator<Object> {

  Map<String, Integer> base;
  public ValueComparator(Map<String, Integer> base) {
      this.base = base;
  }

  public int compare(Object a, Object b) {

    if ((Integer) base.get(a) < (Integer) base.get(b)) {
      return 1;
    } else if ((Integer) base.get(a) == (Integer) base.get(b)) {
      return 0;
    } else {
      return -1;
    }
  }
}

А TreeMap построен следующим образом:

ValueComparator bvc =  new ValueComparator(allMatches);
TreeMap<String, Integer> sortedMap = new TreeMap<String, Integer>(bvc);
//Sort the HashMap
sortedMap.putAll(allMatches);

Где allMatches - это HashMap

7
задан Dennis Sullivan 24 February 2012 в 20:09
поделиться