0

如果我使用 HashMap,我有一个可以工作的代码,但如果我使用 TreeMap 就不行,有人能告诉我为什么吗?

这是我的代码:

package ka.fil;

import java.util.HashMap;
import java.util.Map;

public class ModelInMemory implements Model {
    private Map<String,BeanRecord> map = new HashMap<>();

    @Override
    public void putRecord(BeanRecord beanRecord) {
        map.put(beanRecord.getEmail(), beanRecord);

    }

    @Override
    public BeanRecord getRecord(String email) {
        BeanRecord r = map.get(email);
        return r;
    }

    @Override
    public Iterable<BeanRecord> allRecord() {
        return map.values();
    }

    public ModelInMemory() {

    }



}

我所说的不工作的意思是,当我在主要方法中使用它时,我得到了这个:

 Exception in thread "main" java.lang.NullPointerException at
 java.util.TreeMap.compare(Unknown Source) at java.util.TreeMap.put(Unknown Source) 
at ka.fil.ModelInMemory.putRecord(ModelInMemory.java:11)
 at ka.fil.AppBatch.main(AppBatch.java:10)
4

2 回答 2

10

一个区别是 TreeMaps 不支持空键,但 HashMaps 支持。

beanRecord.getEmail()使用 TreeMap,如果返回 null ,您将在运行时收到异常。

于 2013-06-05T20:52:09.823 回答
3

如果您只是更换线路 -

private Map<String,BeanRecord> map = new HashMap<>();

和 -

private Map<String,BeanRecord> map = new TreeMap<>();

然后它不会工作,因为你有

import java.util.HashMap;

其中不包括 TreeMaps。解决这个问题的简单方法就是这样做

import java.util.*;
于 2013-06-05T20:50:59.473 回答