HashMap既然继承了AbstractMap为什么还要实现Map
来源:互联网 发布:剑三五毒捏脸数据 编辑:程序博客网 时间:2024/05/22 03:05
细心的人可能对HashMap类的定义有疑问,JDK源码中是这样定义的:
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
AbstractMap已经实现了Map接口,HashMap继承了AbstractMap,为什么还要实现Map接口呢?
网络上有些细心的人对这样的写法有疑问,解答者大部分都站在了java一边,认为JDK这样写,肯定有他的道理。但是真正的原因,又很难找到。
其实据java集合框架的创始人Josh Bloch描述,这样的写法是一个失误。在java集合框架中,类似这样的写法很多。stack overflow上面也进行过提问,而且找到了真正的答案,答案出处
从这个问题我们可以看到,Josh Bloch承认这是一个失误,最开始写java集合框架的时候,他认为这样写,在某些地方可能是有价值的,直到他意识到错了。显然的,JDK的维护者,后来不认为这个小小的失误值得去修改。所以就这样存在下来了。
阅读全文
0 0
- HashMap既然继承了AbstractMap为什么还要实现Map
- 为什么HashMap继承了AbstractMap还要实现Map接口
- Vector既然继承了AbstractList为啥还要实现List接口
- Vector既然继承了AbstractList为啥还要实现List接口
- 既然设置了ARC,为什么还要使用@autoreleasepool
- 既然设置了ARC,为什么还要使用@autoreleasepool
- ArrayList既然继承自AbstractList抽象类,而AbstractList已经实现了List接口,那么ArrayList类为何还要再实现List接口呢?
- 既然有ERP, 为什么还要有MES?
- 为什么在集合框架中已经继承了抽象类还要实现接口
- 一个效率低下的Map实现:AbstractMap
- [引用] 既然有了Swing, 那为什么还要SWT?
- [新手必读] 既然有了Swing, 那为什么还要SWT?
- 既然有http 请求,为什么还要用rpc调用?
- A:LinkedList实现了List接口; B: AbstractSet实现了Set接口; C: HashSet继承自AbstractSet基类; D: WeakMap继承自 AbstractMap
- Java nio 的Channel接口继承了Closeable,为什么还要有close() 方法
- Java常见集合框架(十九): Map之Map、AbstractMap、HashMap
- Map和AbstractMap
- Map和AbstractMap
- CC3200 TCP socket编程
- 通道答辩的7个小技巧
- CountDownLatch
- Java篇----JDK开发环境搭建及环境变量配置
- NUC1372 Bull Math【大数】
- HashMap既然继承了AbstractMap为什么还要实现Map
- EXCEL如何做类似省市联动的二级选择菜单?
- 设计模式-Iterator理解
- pat 中求解最长回文串的长度
- 二叉树的先序遍历BTPreorderTraversal
- simCard 学习总结
- JavaScript 心灵鸡汤
- Leetcode 79 Word Search
- 2017.06.20