Java HashSet键/值对

问题描述:

为什么Java不提供函数来获取HashSet中的键/值对,如Hashtable中存在的那样?每次需要获得某些东西时,必须迭代它似乎是一件非常痛苦的事情。还是有更简单的方法来做到这一点?Java HashSet键/值对

+3

你的意思是HashMap? HashSet不包含键/值对。 – 2010-03-23 22:37:48

HashSet没有键/值对。它是对象的一个​​Set,您可以使用Set的实现者来确保对象集合不包含重复项。

HashMap这样的映射的实现者具有键/值对,并提供一个get(Object key)方法来获取与键相关联的值。

+0

谢谢,我认为这开始有意义。 – harley 2010-03-23 22:44:13

+0

太好了。我记得最初我有同样的困惑,我发现我使用集合,当我需要过滤一堆对象只有唯一的对象 - 在这种情况下,我通常然后想迭代他们,并与他们的东西。当我希望能够通过我用作关键字的某些值查看对象时,我使用Maps。 – Brabster 2010-03-23 22:49:04

由于Set不包含键和值,所以不可能提供这样的视图。

你认为什么是关键,Set的价值是什么?

+0

我想我很困惑的文档: 从哈希表:“这个类实现了一个哈希表,它将键映射到值。” 从HashSet:“这个类实现Set接口,支持一个哈希表(实际上是一个HashMap实例)。“ 看看HashSet是一个HashMap和HashMap类似于Hashtable,为什么没有办法获得键/值对? 如果这是一个唯一性的问题不会重写compareTo()是否要走的路? – harley 2010-03-23 22:41:24

+1

HashSet由HashMap返回__,这意味着它在内部使用HashMap。然而这并不意味着它暴露了HashMap。 – 2010-03-23 22:42:56

+0

@Harley:正如Robert所说,HashSet中的HashMap是一个实现细节,它在外部是不可见的。下一步:如果你从来没有**放入一个键/值对,那么你期望它能看到什么? – 2010-03-23 22:59:17

A Set没有任何键/值对,只是(唯一)值。正如您已经说过的那样,您可以通过Iterator或通过使用toArray()方法返回带有这些值的数组来获得这些值。

也许您正在寻找List来代替。