是否存在仅具有键且没有值的Java哈希结构?

时间:2009-01-20 03:55:37

标签: java list hash collections

我正在寻找一个不需要值来散列键的结构。查询时,如果找到密钥则返回true,否则返回false。我正在寻找类似的东西 Hashtable<MyClass, Boolean> 除了插入只需要一个键,查询只返回true或false,永远不会为null。

4 个答案:

答案 0 :(得分:74)

您需要Java HashSet

the official documentation的说明是:

  

此类实现Set接口,由哈希表支持   (实际上是一个HashMap实例)。它不能保证   集合的迭代顺序;特别是,它并不保证   订单将随着时间的推移保持不变。该类允许null   元件。

     

此类为基本操作提供恒定的时间性能   (添加,删除,包含和大小),假设散列函数分散   桶中的元素正确。迭代这个集合   需要的时间与HashSet实例的大小之和成正比   (元素数量)加上后备HashMap的“容量”   实例(桶的数量)。因此,不设置是非常重要的   如果,初始容量太高(或负载因子太低)   迭代性能很重要。

     

请注意,此实现未同步。如果有多个线程   同时访问哈希集,以及至少一个线程   修改集合,必须在外部同步。这是   通常通过自然地同步某个对象来完成   封装集合。如果不存在这样的对象,则该集合应该是   使用Collections.synchronizedSet方法“包装”。这是最好的   在创建时完成,以防止意外的不同步访问   集:

     

Set s = Collections.synchronizedSet(new HashSet(...));

     

此类的迭代器方法返回的迭代器是快速失败的:   如果在创建迭代器后的任何时间修改了该集,则   除了通过迭代器自己的删除方法,Iterator之外的任何方式   抛出ConcurrentModificationException。因此,面对   并发修改,迭代器快速干净地失败,   而不是冒着任意的,非确定性的行为冒险   未来不确定的时间。

     

请注意,无法保证迭代器的快速失败行为   一般来说,不可能做出任何硬性保证   存在不同步的并发修改。快速失败   迭代器抛出ConcurrentModificationException就是尽力而为   基础。因此,编写一个依赖的程序是错误的   关于它的正确性的这个例外:快速失败的行为   迭代器应该只用于检测错误。

     

此类是Java Collections Framework的成员。

答案 1 :(得分:14)

java.util.HashSet中?使用contains()进行查找。

答案 2 :(得分:2)

另请参阅基于给定map实现创建集合的静态方法Collections#newSetFromMap。这样可以很方便地创建一个弱哈希集。

答案 3 :(得分:0)

Java Set旨在删除重复项,希望HashMap必须在内部使用Java Set 来管理密钥,因为密钥永远不会有重复项,所以你应该考虑根据你的需求进行设置。