Java中Hashtable中的Set keys()和Set keyset()有什么区别?

时间:2015-08-24 08:22:27

标签: java collections hashtable

我正在本网站上学习收藏框架:http://way2java.com/collections/hashtable-about/。阅读Hashtable的所有方法后,我看到两种方法来访问表的键:

  1. Set keys():返回包含所有键的Set对象

  2. Set keySet():返回包含Set所有键的Hashtable对象。一个相似性是HashtableSet不允许重复。在Set中添加和删除元素也会反映在Hashtable

  3. 它们都返回Set个对象。我不认为他们之间有什么不同。有谁可以告诉我这件事?

3 个答案:

答案 0 :(得分:3)

keys()没有返回Set,它会返回Enumeration<K>

Hashtable是一个非常遗留的类,不再推荐使用。它由HashMapConcurrentHashMap 取代。它存在于JCF之前,因此在开始时获取密钥的标准方法是通过Enumeration - 用于移动对象集合的原始Java接口。

然后是Java 1.2和JCF。对Map接口使用keySet()方法对Set进行了改进Hashtable,该方法返回了Hashtable(也在JCF中引入)。出于遗留兼容性原因,保留了keys方法。从新方法返回的Set实现了两件事:

  1. 传达意图 - 它强化了Hashtable的键是数学集的事实
  2. 实现Iterable<T>,取代Enumerable<T>
  3. 来自nuget package文档:

      

    从Java 2平台v1.2开始,这个类被改进以实现Map接口,使其成为Java Collections Framework的成员。与新的集合实现不同,Hashtable是同步的。如果不需要线程安全实现,建议使用HashMap代替Hashtable。如果需要线程安全的高度并发实现,那么建议使用ConcurrentHashMap代替Hashtable。

答案 1 :(得分:1)

Hashtable中的方法keys()实际上返回密钥的枚举:

  Enumeration<K>    keys()

返回此哈希表中键的枚举。

答案 2 :(得分:1)

Hashtable是一个旧的,过时的类,在Java 1.2(!)中引入standard collections framework之前存在于Java中,并且经过改进以便遵循Map接口。

keys()存在于原始Hashtable中,并返回Enumaration个密钥。 keySet()是在Map界面中引入的更现代的方法,并返回Set个键。