我有一个代码,如果我使用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)
答案 0 :(得分:10)
一个区别是TreeMaps不支持null键,但是HashMaps不支持。
使用TreeMap,如果beanRecord.getEmail()
返回null,您将在运行时获得异常。
答案 1 :(得分:3)
如果您只是更换线 -
private Map<String,BeanRecord> map = new HashMap<>();
with -
private Map<String,BeanRecord> map = new TreeMap<>();
然后它不会工作,因为你有
import java.util.HashMap;
其中不包含TreeMaps。轻松解决这个问题就是
import java.util.*;