我从我的java课程中知道,当我实现一个接口时,我必须构建该接口中存在的所有方法。但是当我看了一下HashSet我观察到它没有构建Set接口的所有方法。为什么?为什么HashSet不会构建Set接口的所有方法
0
A
回答
0
查看超类AbstractSet。来自java文档:“这个类提供了Set接口的骨架实现,以最小化实现这个接口所需的工作。” HashSet扩展了AbstractSet,所以在AbstractSet中没有实现的东西在HashSet中实现。
0
HashSet
实现了Set
接口的所有方法。并非它们全部直接出现在HashSet
代码中,因为一些(例如removeAll
)从AbstractSet
继承,而其他(例如toArray
)从AbstractCollection
继承。你可以在documentation中看到这一切。
这些抽象类非常有用。如果您扩展AbstractSet
,则您只需覆盖size
,contains
和iterator
,即可免费获得正确运行的其他方法的版本(例如,containsAll
,hashCode
,toArray
,stream
)。无论如何,您可以选择覆盖它们以提高效率。
3
如果你看一下HashSet
类的声明,你可以看到,除了实施Set
,Cloneable
和Serializable
,它扩展了AbstractSet
类,它本身延伸AbstractCollection
。
例如,两个toArray()
过载在AbstractCollection
类中实现。 addAll()
,containsAll()
,retainAll()
和removeAll()
方法也是如此。此外,removeAll()
在AbstractSet
中被覆盖。
equals()
和hashCode()
方法在Object
中定义,在AbstractSet
中被覆盖。
希望这有助于...
杰夫
相关问题
- 1. RandomAccess接口,为什么没有方法?
- 2. 为什么VolatileImage没有set/getPixel()方法
- 3. 为什么OrderByDescending不会被识别为构建方法
- 4. 'Set = new HashSet'或'HashSet = new Hashset'?
- 5. 定义'Set set = new HashSet()'时,是否设置了接口或类的实例Set?
- 6. 为什么接口不能有静态成员方法
- 7. 静态方法不能实现接口方法,为什么?
- 8. 为什么接口默认方法?
- 9. 拼接方法为什么会有这种奇怪的行为?
- 10. 为什么不建议在SQLite的C接口接口sqlite3_get_table
- 11. Set和HashSet Java
- 12. 为什么设备和模拟器的构建有所不同?
- 13. 为什么ArrayAdapter没有像arraylist那样的set方法呢?
- 14. 为什么没有在Set界面上定义的replace()方法?
- 15. 为什么[WCF]有接口
- 16. 为什么不是方法String.indexOf接口CharSequence的一部分?
- 17. C++ 11已实现的接口方法不可用。为什么?
- 18. 为什么不能公开一个实现的接口方法?
- 19. 为什么Netbeans找不到接口实例的方法?
- 20. 有什么更好的创建不同的数据结构:HashSet或Linq的Distinct()?
- 21. 为什么Java实现Set和ArrayList的不同hashcode方法?
- 22. 为什么Typescript中的抽象类实现和接口必须实现接口中的所有方法
- 23. Go结构作为方法接收器有和没有接口
- 24. WindowManager.LayoutParams为什么会有setTitle方法?
- 25. 接口抽象的所有方法?
- 26. 为什么使用方法“grid()”时tkinter窗口不会打开?
- 27. 为什么我的gradle构建失败? (找不到方法apt())
- 28. 为什么xcode为某些方法找到接口但不是其他方法?
- 29. 为什么有些接口方法被另一个接口覆盖?
- 30. 为什么我的接口类型对象不会执行未在接口中声明的方法?
你是什么意思没有“建立所有的方法?” 'Set'中定义的每个方法都由'HashSet'实现,或者由它的超类实现。 – resueman
您认为哪些方法未实现? –
如果没有实现所有必需的方法,(具体)类将无法编译。 – ergonaut