我正在寻找一种无需值即可对键进行哈希处理的结构。查询时,如果找到密钥,则应返回 true,否则返回 false。我正在寻找类似的东西Hashtable<MyClass, Boolean>
除了插入只需要一个键,查询只返回 true 或 false,从不返回 null。
你需要Java的HashSet http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html (Java 8 http://docs.oracle.com/javase/8/docs/api/java/util/HashSet.html).
描述来自官方文档 https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html is:
此类实现 Set 接口,由哈希表支持
(实际上是一个HashMap实例)。它不保证
集合的迭代顺序;特别是,它不保证
随着时间的推移,顺序将保持不变。该类允许 null
元素。
此类为基本操作提供恒定时间性能
(添加、删除、包含和大小),假设散列函数分散
将元素正确地放置在桶中。迭代这个集合
需要的时间与 HashSet 实例大小的总和成正比
(元素数量)加上支持 HashMap 的“容量”
实例(桶的数量)。因此,不要设置非常重要
初始容量太高(或负载系数太低),如果
迭代性能很重要。
请注意,此实现不是同步的。如果是多线程
同时访问一个哈希集,并且至少有一个线程
修改集合,必须在外部同步。这是
通常通过同步某个对象来完成,该对象自然地
封装了集合。如果不存在这样的对象,则该集合应该是
使用 Collections.synchronizedSet 方法“包装”。这是最好的
在创建时完成,以防止意外的不同步访问
集合:
Set s = Collections.synchronizedSet(new HashSet(...));
此类的迭代器方法返回的迭代器是快速失败的:
如果在创建迭代器后随时修改集合,则
除了通过迭代器自己的删除方法之外的任何方式,迭代器
抛出 ConcurrentModificationException。于是,面对
并发修改,迭代器快速而干净地失败,
而不是冒着任意、非确定性行为的风险
未来不确定的时间。
请注意,无法保证迭代器的快速失败行为
因为一般来说,不可能做出任何硬性保证
存在不同步的并发修改。快速失败
迭代器尽力抛出 ConcurrentModificationException
基础。因此,编写依赖于
关于此异常的正确性:快速失败行为
迭代器应该仅用于检测错误。
此类是 Java 集合框架的成员。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)