map.entrySet()问题?

代码才是女朋友 2023-11-10 13:44:06

 

 写了个类继承实现了map,创建该类对象调用put方法后,如果不重写entrySet方法,则对象为空,这是个什么原因啊?

...全文
191 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-11-10
精选
  • 打赏
  • 举报
回复
您的问题已经帮您同步至问答, 链接: https://ask.csdn.net/questions/8027188, 请您保持关注, 如果回答有帮助解决此问题, 麻烦您动动小手给相关的回答点赞, Ada会在评论区为您更新结题状态
5美刀 2023-11-13
  • 打赏
  • 举报
回复

解决这个问题时,你需要明确jdk8之前所有的接口默认方法都是抽象方法。而map接口最早出现在jdk1.2,因此你需要实现它的 entrySet 方法才能为你工作。

  • 打赏
  • 举报
回复

这个问题的原因可能是你在实现Map接口时没有正确地实现entrySet方法。在Java中,Map接口有一个entrySet方法,它返回一个包含映射关系的Set视图,每个元素都是一个Map.Entry对象。
如果你没有重写entrySet方法,那么默认实现将返回一个空的Set。这意味着你的Map实现不会正常工作,因为put方法会在内部使用entrySet方法来存储键值对。因此,在调用put方法后,你的Map对象可能仍然为空。
为了解决这个问题,你需要在你的Map实现中重写entrySet方法,以确保它返回包含正确键值对的Set视图。下面是一个简单的示例:


public class MyMap<K, V> implements Map<K, V> {
    // ...
    @Override
    public Set<Map.Entry<K, V>> entrySet() {
        return new HashSet<>(entries); // entries是你的键值对集合
    }
}

在这个示例中,我们使用了HashSet来存储键值对,并返回一个包含这些键值对的Set视图。这样,当你调用put方法时,键值对就会被正确地存储在entries集合中,并且可以通过entrySet方法访问到。

凉柚ˇ 2023-11-10
  • 打赏
  • 举报
回复 2

entrySet 方法在 Map 接口中的定义为抽象方法,因此在继承实现 Map 接口时,需要在类中重写 entrySet 方法,以便返回一个包含键值对的集合。如果没有重写 entrySet 方法,而是使用了默认的实现,就会返回 null,导致对象为空( ̄▽ ̄)~*。

300,605

社区成员

发帖
与我相关
我的任务
社区描述
java领域交流社区,旨在为大家提供一个文明交流,互相探讨兴趣爱好的环境,欢迎各位大佬加入。
java 个人社区 广东省·深圳市
社区管理员
  • 桃花键神
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧