300,605
社区成员
发帖
与我相关
我的任务
分享

写了个类继承实现了map,创建该类对象调用put方法后,如果不重写entrySet方法,则对象为空,这是个什么原因啊?
解决这个问题时,你需要明确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方法访问到。
entrySet 方法在 Map 接口中的定义为抽象方法,因此在继承实现 Map 接口时,需要在类中重写 entrySet 方法,以便返回一个包含键值对的集合。如果没有重写 entrySet 方法,而是使用了默认的实现,就会返回 null,导致对象为空( ̄▽ ̄)~*。