首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >填充TreeMap会抛出NullPointerException

填充TreeMap会抛出NullPointerException
EN

Stack Overflow用户
提问于 2010-11-08 19:35:27
回答 2查看 2.8K关注 0票数 1

我在创建TreeMap时得到了一个NullPointerException。

下面是我的代码:

代码语言:javascript
运行
复制
public TreeMap<AccountGroupBean,List<AccountBean>> getAccountsAndGroups() throws SessionExpiredException {
    TreeMap<AccountGroupBean,List<AccountBean>> map = new TreeMap<AccountGroupBean,List<AccountBean>>();
    List<AccountGroupBean> groups = getAccountGroups();
    for(AccountGroupBean group : groups) {
        List<AccountBean> accounts = getAccountsByGroupId(group.getId());
        System.out.println("PRINT"+ accounts.size());           
        map.put(group,accounts);
        System.out.println("!" +map.get(group).size());
    }
    return map;
}

第一个println打印44。这就是说它不为空。但是,第二个println会引发null异常。

你知道我做错了什么吗?

解决方案

正如接受的解决方案中所指出的那样。问题出在我的compareTo实现中。

我曾经有过:

代码语言:javascript
运行
复制
public int compareTo(AccountGroupBean o) {
    return (number > o.getNumber()) ? 1 : -1;       
}

添加0返回值解决了这个问题:

代码语言:javascript
运行
复制
public int compareTo(AccountGroupBean o) {
    if(number == o.getNumber()) {
         return 0;
    }
    return (number > o.getNumber()) ? 1 : -1;       
}
EN

Stack Overflow用户

发布于 2010-11-08 19:49:46

这很可能是AccountGroupBean类如何实现equals和hashcode的问题。有一些实现equals和hashcode的规则,你应该确保你的代码符合这些规则。equals方法的一些规则包括。

对于任何非NULL值,

  • Reflexive始终为true
  • Symetric对于非NULL值,x.equals(z)必须返回true当且仅当对于非NULL值,x.equals(y)为true如果x.equals(y)为true且y.equals(z)为true,则x.equals(z)也必须为true
  • Consistant如果对象尚未修改,则在多次调用期间,equals方法应返回相同的答案。
  • 如果两个对象相等,则其哈希方法应返回相同的值。
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4123426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档