java hashset应用_java-我们应该使用HashSet吗?

HashSet由HashMap支持.从JavaDoc:

This class implements the Set interface, backed by a hash table

(actually a HashMap instance)

在查看源代码时,我们还可以看到它们之间的关系:

// 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;

}

因此,HashSet< E>由HashMap< E,Object>支持.对于我们应用程序中的所有HashSet,我们都有一个引用对象PRESENT,我们在HashMap中使用该值.尽管存储PRESENT所需的内存可以忽略,但是我们仍然为映射中的每个值存储对其的引用.

使用null代替PRESENT会更有效吗?然后,如果情况允许使用Map而不是Set,那么我们应该完全放弃HashSet并直接使用HashMap.

我引发这些想法的基本问题是以下情况:我具有以下属性的对象集合:

>大量的对象> 30’000

>插入顺序不相关

>高效检查是否包含物品

>将新项目添加到集合中不相关

所选解决方案应在上下文中对上述标准执行最佳操作,并最大程度地减少内存消耗.在此基础上,我们想到了数据结构HashSet和HashMap.在考虑替代方法时,关键问题是:

How to check containement efficiently?

我想到的唯一答案是使用items哈希计算存储位置.我可能在这里错过了一些东西.还有其他方法吗?

我看了各种问题,确实弄清了这个问题,但没有悄悄回答我的问题:

我不是在寻求任何替代库或框架的建议来解决此问题,但我想了解是否还有其他方法可以考虑对Collection中的元素进行有效的包含检查.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值