【发布时间】:2010-10-02 09:14:17
【问题描述】:
我正在寻找一种无需值即可散列键的结构。查询时,如果找到密钥,则返回 true,否则返回 false。我正在寻找类似的东西
Hashtable<MyClass, Boolean>
除了插入只需要一个键并且查询只返回真或假,永远不会为空。
【问题讨论】:
标签: java list hash collections
我正在寻找一种无需值即可散列键的结构。查询时,如果找到密钥,则返回 true,否则返回 false。我正在寻找类似的东西
Hashtable<MyClass, Boolean>
除了插入只需要一个键并且查询只返回真或假,永远不会为空。
【问题讨论】:
标签: java list hash collections
来自the official documentation的描述是:
这个类实现了 Set 接口,由一个哈希表支持 (实际上是一个 HashMap 实例)。它不保证 集合的迭代顺序;特别是,它不保证 随着时间的推移,订单将保持不变。此类允许 null 元素。
此类为基本操作提供恒定时间性能 (添加、删除、包含和大小),假设散列函数分散 桶中的元素正确。迭代这个集合 所需时间与 HashSet 实例大小的总和成正比 (元素的数量)加上支持 HashMap 的“容量” 实例(桶的数量)。因此,不要设置是非常重要的 初始容量太高(或负载系数太低)如果 迭代性能很重要。
请注意,此实现不同步。如果多个线程 同时访问一个哈希集,以及至少一个线程 修改集合,它必须在外部同步。这是 通常通过同步一些自然而然的对象来完成 封装集合。如果不存在这样的对象,则该集合应该是 使用 Collections.synchronizedSet 方法“包装”。这是最好的 在创建时完成,以防止意外的不同步访问 集合:
Set s = Collections.synchronizedSet(new HashSet(...));
这个类的迭代器方法返回的迭代器是快速失败的: 如果集合在迭代器创建后的任何时间被修改,在 任何方式,除了通过迭代器自己的删除方法,迭代器 引发 ConcurrentModificationException。于是,面对 并发修改,迭代器快速而干净地失败, 而不是冒着随意的、非确定性的行为的风险 未来未定时间。
请注意,无法保证迭代器的快速失败行为 因为一般来说,不可能做出任何硬性保证 在存在不同步的并发修改的情况下。快速失败 迭代器尽最大努力抛出 ConcurrentModificationException 基础。因此,编写一个依赖的程序是错误的 关于这个例外的正确性:快速失败的行为 迭代器应该只用于检测错误。
此类是 Java 集合框架的成员。
【讨论】:
Java Set 旨在删除重复项,希望 HashMap 必须在内部使用 Java Set 来管理键,因为键永远不会有重复项,因此您应该考虑根据您的要求设置。
【讨论】:
另见静态方法Collections#newSetFromMap,它根据给定的地图实现创建一个集合。例如,这对于创建弱哈希集非常方便。
【讨论】:
java.util.HashSet?使用 contains() 进行查找。
【讨论】: