问题:为什么 LinkedHashSet 继承了 HashSet 还要实现 Set?
这几天在学习 Java 集合,学到 LinkedHashSet 的时候发现,HashSet 已经实现过 Set, 作为 HashSet 的子类,LinkedHashSet 没有必要再次声明实现 Set 接口;
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
答案
在 stackoverflow 上看到一个下面的回复:
I’ve asked Josh Bloch, and he informs me that it was a mistake. He used to think, long ago, that there was some value in it, but he since “saw the light”. Clearly JDK maintainers haven’t considered this to beworth backing out later.
我问过乔什·布洛赫(Josh Bloch),他告诉我这是一个错误。很久以前,他曾经认为其中有一些价值,但是他自从“看到了光”。显然,JDK维护人员不认为值得稍后撤消。
个人集合学习笔记:语雀:Java 集合框架
参考:https://stackoverflow.com/questions/2165204/why-does-linkedhashsete-extend-hashsete-and-implement-sete