【问题标题】:Java HashSet key/value pairJava HashSet 键/值对
【发布时间】:2011-01-31 00:53:36
【问题描述】:

为什么Java 不提供函数来获取HashSet 中的键/值对,就像Hashtable 中存在的那样?每次你需要做某事时都必须对其进行迭代,这似乎是一种真正的痛苦。或者有更简单的方法吗?

【问题讨论】:

  • 你是说HashMap吗? HashSet 不包含键/值对。

标签: java iteration hashset


【解决方案1】:

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

HashMap 这样的Map 实现者拥有键/值对,并提供get(Object key) 方法来获取与键关联的值。

【讨论】:

  • 谢谢,我认为这开始有意义了。
  • 太棒了。我记得我最初也有同样的困惑,我发现当我需要将一堆对象过滤成唯一的对象时,我会使用 Sets——在这种情况下,我通常想要遍历它们并填充它们。当我希望能够通过我用作键的某个值来查找对象时,我会使用 Maps。
【解决方案2】:

由于Set 不包含键和值,因此无法提供这样的视图。

您认为什么是关键,Set 中的值是什么?

【讨论】:

  • 我想我对文档感到困惑:来自 Hashtable:“这个类实现了一个哈希表,它将键映射到值。”来自 HashSet:“这个类实现了 Set 接口,由一个哈希支持table(实际上是一个HashMap实例)。” 看到HashSet是一个HashMap,HashMap与Hashtable类似,为什么没有办法获取key/value对?如果这是一个唯一性问题,那么重写 compareTo() 不是要走的路吗?
  • HashSet 由 HashMap支持,这意味着它在内部使用 HashMap。然而,这并不意味着它公开了 HashMap。
  • @Harley:正如罗伯特所说,HashSet 内部的HashMap 是一个实现细节,它在外部是不可见的。下一篇:如果您从未放入键/值对,那么您希望它显示什么?
【解决方案3】:

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

也许您正在寻找List

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2016-08-02
    • 2017-10-29
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多