为什么Java集合框架的LinkedHashMap没有同HashMap、TreeMap类似的put方法?
技术解答
该疑问属于对Java集合框架设计和继承机制的常见误解,LinkedHashMap本身完全支持和HashMap、TreeMap完全一致的put方法,不存在功能缺失,具体说明如下:
put是java.util.Map接口定义的核心通用方法,所有符合规范的Map实现类都必须支持该操作LinkedHashMap是HashMap的直接子类,它直接继承了HashMap的put方法实现,不需要单独重复定义相同的方法签名;仅在内部重写了put逻辑调用的钩子方法afterNodeAccess、afterNodeInsertion,用来实现插入顺序/访问顺序保持的特有特性- 你提供的示例代码本身可以正常运行,运行结果会输出
{5=6},验证了put方法的可用性:
LinkedHashMap<Integer,Integer> set=new LinkedHashMap<>(); set.put(5,6); System.out.println(set);
所谓「put方法应当定义在LinkedHashMap的接口中」的表述存在两处错误:第一,
LinkedHashMap是类不是接口;第二,它的父类HashMap已经实现了Map接口要求的put方法,子类不需要重复定义完全相同的公共方法签名即可直接调用。
很多开发者之所以会产生该疑问,多是因为查看LinkedHashMap源码时没有找到单独声明的put方法,这是面向对象继承机制的常规实现,通用公共方法放在父类中统一实现,子类直接复用即可,不需要冗余定义。
内容的提问来源于stack exchange,提问作者Tushar
相关产品推荐
相关产品推荐

