【问题标题】:HashMap Vs TreemapHashMap 与 Treemap
【发布时间】:2013-06-05 20:45:32
【问题描述】:

如果我使用 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)

【问题讨论】:

  • 你能定义不工作吗?
  • 你能把你得到的错误信息贴出来吗?
  • 按字典顺序排序,即。
  • @ZiyaoWei:当我在主要方法中使用它时,我得到了这个: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)
  • 如果您想了解更多有关 TreeMap 的信息,请参阅我的 Internal life of TreeMap 教程

标签: java hashmap treemap


【解决方案1】:

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

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

【讨论】:

  • @Kafil10 所以放一个 if(r==null)system.out.println("this is the answer");在 getEmail() 之后。如果触发,那么你就会知道。
  • 你说得对,我不知道 TreeMap 不支持空键,因为我是 java 新手。谢谢
【解决方案2】:

如果你只是换行 -

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

与 -

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

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

import java.util.HashMap;

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

import java.util.*;

【讨论】:

  • +1,鹰眼!但是通配符导入有点“太多”恕我直言
  • 对于 java.util 我通常会放一个通配符,只是因为它非常有用而且我经常使用它。否则,如果我从一个包中导入 3 个或更多,我只会放一个通配符。
  • +1 但我们不确定他的问题是这个问题,因为我们没有错误消息。
  • @Kafil10 那么您能否编辑您的帖子并添加您收到的错误消息,以便我们可以处理更多内容?
猜你喜欢
  • 2017-08-28
  • 1970-01-01
  • 2018-05-01
  • 2021-04-29
  • 2013-12-11
  • 1970-01-01
  • 2011-02-22
  • 2013-10-31
  • 1970-01-01
相关资源
最近更新 更多