哈希集由哈希映射支持。从它的JavaDoc:
这个类实现了Set接口,由哈希表(实际上是一个HashMap实例)支持
在查看源时,我们还可以看到它们之间的关系:
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
因此,一个<code>哈希集
使用null
而不是PRESENT
,不是更有效吗?进一步考虑的是,如果环境允许使用映射
而不是集合
,我们是否应该完全放弃哈希集
,直接使用HashMap
。
触发这些想法的基本问题是以下情况:我有一组具有以下属性的对象:
如何有效地检查集装箱?
我想到的唯一答案是使用items hash来计算存储位置。我可能漏掉了一些东西。还有其他方法吗?
我看了各种问题,这确实对这个问题有所了解,但没有悄悄地回答我的问题:
我并不寻求任何替代库或框架的建议来解决这个问题,但我想知道是否有其他方式来考虑对< code >集合中的元素进行有效的包含检查。
Hashtables和HashSets应该完全不同,所以也许两者不应该被比较为“哪个更有效”。哈希集更适合数学“集”(例如 {1,2,3,4})。它们不包含重复项,并且只允许一个空值。虽然哈希图更像是一个关键 -
简而言之,是的,您应该使用HashSet。它可能不是最有效的 Set 实现,但这几乎无关紧要,除非您正在处理大量数据。
在这种情况下,我建议使用专门的库。EnumMaps(如果您可以使用枚举)、像 Trove 这样的基元映射(如果数据主要是基元)、针对某些数据类型优化的一堆其他数据结构,甚至是内存数据库。
不要误解我,我也喜欢性能调优,但是只有在真正必要的时候才应该替换内置的数据结构。在大多数情况下,它们工作得非常好。
如果你真的想节省最后一点内存,而不在乎插入,你可以做的是使用一个固定大小的数组,对它进行排序,每次都做一次二分搜索法。但是我怀疑它是否比HashSet更有效。
问题内容: 我们的网站目前正在使用jQuery库,每月的访问量约为100万。我们希望包括以API为中心的方法,因此决定转向Javascript MVC并为此选择了angularJS。 现在我的问题是,我应该在Angular顶部使用jQuery,以便我需要重写最少的DOM操作代码,还是应该以Angular方式重写所有内容?我们使用的是jQuery插件,例如plupload,jQuery UI。等在网
Android开发人员教程建议我使用片段的主机活动来传递数据等等,那么为什么会有一个设置/获取目标片段的方法呢? 到目前为止,我的应用程序包含一个宿主活动和一个片段,其中有一个按钮可以启动一个对话片段,其中有一个按钮可以启动另一个对话片段。使用让整个磨难有些混乱,所以我正在考虑重新实现,让我的主要活动通过我的主要片段的自定义界面处理方法。 这是正确的思维方式吗?还是使用没有害处?任何人都可以提供使
问题内容: 面试官问我: 什么是Observer,什么Observable时候应该使用它们? 我并不了解这些术语,因此当我回到家并开始使用GoogleObserver和Google搜索时Observable,从不同的资源中发现了一些要点: 1)Observable是一个类,Observer是一个接口。 2)Observable该类维护一个Observers的列表。 3)当一个Observable对
从外观上看-似乎创建了一个对象的克隆。如果是这样,那么对于实现可克隆接口(只有不可变对象是新的,因为可变对象有引用复制)的关注,哪一个是最好的,为什么? 我昨天实现了克隆,然后意识到我必须为非字符串/首字母元素提供自己的修改。然后我被告知我现在正在使用的。这两个实现似乎都提供了类似的功能。 谢谢
问题内容: 我一直在研究PDO 。我知道用PDO准备我的SQL语句可以防止发生SQL注入。 代码示例: 通过将ID绑定为数字,并且Title是字符串,我们可以限制当有人尝试在代码中进行SQL注入时所造成的损害。 我们是否应该始终将值与a绑定,以便可以限制在SQL注入中可以从数据库中提取的内容?这样在执行PDO时会增加PDO的安全性吗? 问题答案: 一个有两个问题。重要的是不要混淆它们 我们是否应该
问题内容: 我正在使用’multiprocess.Pool.imap_unordered’如下 我需要打电话或之后的for循环? 问题答案: 不,您没有,但是如果您不再使用游泳池,那可能是个好主意。 Tim Peters在此SO帖子中致电或致电的理由很明确: 至于Pool.close(),您应该在永远不会将更多工作提交给Pool实例的情况下(且仅在)进行调用。因此,通常在主程序的可并行化部分完成时