我正在本网站上学习收藏框架:http://way2java.com/collections/hashtable-about/。阅读Hashtable
的所有方法后,我看到两种方法来访问表的键:
Set keys()
:返回包含所有键的Set
对象
Set keySet()
:返回包含Set
所有键的Hashtable
对象。一个相似性是Hashtable
,Set
不允许重复。在Set
中添加和删除元素也会反映在Hashtable
它们都返回Set
个对象。我不认为他们之间有什么不同。有谁可以告诉我这件事?
答案 0 :(得分:3)
keys()
没有返回Set
,它会返回Enumeration<K>
。
Hashtable
是一个非常遗留的类,不再推荐使用。它由HashMap
或ConcurrentHashMap
†取代。它存在于JCF之前,因此在开始时获取密钥的标准方法是通过Enumeration
- 用于移动对象集合的原始Java接口。
然后是Java 1.2和JCF。对Map
接口使用keySet()
方法对Set
进行了改进Hashtable
,该方法返回了Hashtable
(也在JCF中引入)。出于遗留兼容性原因,保留了keys
方法。从新方法返回的Set
实现了两件事:
Hashtable
的键是数学集的事实Iterable<T>
,取代Enumerable<T>
†来自nuget package文档:
从Java 2平台v1.2开始,这个类被改进以实现Map接口,使其成为Java Collections Framework的成员。与新的集合实现不同,Hashtable是同步的。如果不需要线程安全实现,建议使用HashMap代替Hashtable。如果需要线程安全的高度并发实现,那么建议使用ConcurrentHashMap代替Hashtable。
答案 1 :(得分:1)
答案 2 :(得分:1)
Hashtable
是一个旧的,过时的类,在Java 1.2(!)中引入standard collections framework之前存在于Java中,并且经过改进以便遵循Map
接口。
keys()
存在于原始Hashtable
中,并返回Enumaration
个密钥。 keySet()
是在Map
界面中引入的更现代的方法,并返回Set
个键。