我正在寻找一个不需要值来散列键的结构。查询时,如果找到密钥则返回true,否则返回false。我正在寻找类似的东西
Hashtable<MyClass, Boolean>
除了插入只需要一个键,查询只返回true或false,永远不会为null。
答案 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 来管理密钥,因为密钥永远不会有重复项,所以你应该考虑根据你的需求进行设置。