问题标签 [hashset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
3839 浏览

c# - .NET:如何有效地检查列表中的唯一性50,000 个项目?

在某些库代码中,我有一个可以包含 50,000 项或更多项的列表。

库的调用者可以调用导致字符串被添加到列表中的方法。如何有效地检查要添加的字符串的唯一性?

目前,在添加字符串之前,我会扫描整个列表并将每个字符串与要添加的字符串进行比较。这开始显示超过 10,000 个项目的规模问题。

我将对此进行基准测试,但对洞察力感兴趣。

  • 如果我将 List<> 替换为 Dictionary<> ,随着列表增加到 10,000 个或更多项目, ContainsKey() 会明显更快吗?
  • 如果我将唯一性检查推迟到添加所有项目之后,它会更快吗?那时我需要检查每个元素与其他元素,仍然是 n^^2 操作。

编辑

一些基本的基准测试结果。我创建了一个抽象类,它公开了 2 个方法:填充和扫描。Fill 只是用 n 个项目填充集合(我使用了 50,000 个)。Scan 扫描列表 m 次(我使用了 5000 次)以查看是否存在给定值。然后我为 List 构建了该类的实现,为 HashSet 构建了另一个实现。

使用的字符串长度统一为 11 个字符,通过抽象类中的方法随机生成。

一个非常基本的微基准。

因此,对于该长度的字符串,HashSet 在扫描唯一性时大约比 List 快 25 倍。此外,对于这种大小的集合,在向集合中添加项目时,HashSet 对 List 的惩罚为零。

结果很有趣且无效。为了得到有效的结果,我需要做热身间隔,多次试验,随机选择实施。但我相信这只会稍微改变标准。

感谢大家。

编辑2

在添加随机化和多次试验后,HashSet 在这种情况下始终优于 List,大约 20 倍。

这些结果不一定适用于可变长度的字符串、更复杂的对象或不同的集合大小。

0 投票
4 回答
1411 浏览

java - 空指针异常:空错误

我有这个哈希集代码,当我尝试在它上面运行我的编译方法时,我得到了 Null Pointer Exception: null 错误。这是代码:

与此错误相关的其他行是:

0 投票
12 回答
76910 浏览

java - Java HashMap keySet() 迭代顺序是否一致?

我了解从 Map 的 keySet() 方法返回的 Set 不保证任何特定的顺序。

我的问题是,它是否保证多次迭代的顺序相同。例如

在上面的代码中,假设 map没有被修改,那么对 keySet 的迭代是否会按照相同的顺序进行。使用 Sun 的 jdk15 它确实以相同的顺序迭代,但在我依赖这种行为之前,我想知道是否所有 JDK 都会这样做。

编辑

我从答案中看到我不能依赖它。太糟糕了。我希望不必建立一些新的收藏来保证我的订购。我的代码需要迭代,执行一些逻辑,然后以相同的顺序再次迭代。我将从 keySet 创建一个新的 ArrayList 来保证顺序。

0 投票
9 回答
46414 浏览

java - 在 HashMap 中使用 keySet() 方法

我有一种方法可以遍历板上的可能状态并将它们存储在 HashMap 中

}

我对这组键感兴趣。我应该怎么做才能全部打印出来?

HashSet t = map.keySet()被编译器拒绝

0 投票
1 回答
195 浏览

.net-3.5 - 检索哈希集对象引用

HashSet<string>如果我知道字符串存在,如何有效地获取对字符串的引用?

IE

谢谢!

0 投票
2 回答
1257 浏览

fluent-nhibernate - 是否可以使用 Fluent NHibernate 约定将所有 ICollections 映射为集合?

是否可以使用 Fluent NHibernate 约定将所有 ICollections 映射为集合?我有一个像这样的实体:

使用流利的映射,此属性将被映射为HasMany(x => x.Animals).AsSet(),但我将如何使用我想与自动映射器一起使用的约定来做到这一点?

默认情况下,我应该添加它,ICollections将其持久化为ILists,当它尝试将其转换为 时,我会得到一个转换HashSet异常IList

0 投票
6 回答
24110 浏览

c# - 如何在 .NET 中使用 Hashtables/HashSets?

我有一个大约 9000 种产品的列表,其中一些可能有重复。

我想用产品序列号作为它们的键来制作这些产品的哈希表,这样我就可以很容易地找到重复项。

如何在 C#/.NET 中使用 HashTable?HashSet 会更合适吗?

最终我想要一个像这样的列表:

密钥序列号:11110 - 包含:Product1
密钥序列号:11111 - 包含:Product3、Product6、Product7
密钥序列号:11112 - 包含:Product4
密钥序列号:11113 - 包含:Product8、Product9

所以,我有一个所有产品的列表,它们按具有重复序列号的产品分组。这样做的“正确”方法是什么?

0 投票
2 回答
5476 浏览

java - 覆盖 HashSet 的 Contains 方法

谁能告诉我如何覆盖 HashSet 的 contains() 方法以使用正则表达式匹配而不是仅使用 equals()?

或者,如果不是覆盖,我如何添加使用正则表达式模式的方法?基本上,我希望能够在包含字符串的 HashSet 上运行正则表达式,并且我需要使用正则表达式匹配子字符串。

如果我的方法不合适,请建议其他人。

谢谢你。:)

0 投票
2 回答
4630 浏览

c# - LINQ 中用于迭代 HashSet 的巧妙替代方案

我有一个我正在使用的 URL 的白名单,在HashSet<string>. 我正在尝试查找是否以url白名单中的任何项目开头(必须如此)。

编辑:前面的例子有点误导并且有一个错字——我已经有一个像 yahoo.com 这样的基本 url,白名单只是路径。

是否有更优雅的方式使用 LINQ(对象)进行此查找?该列表并不大,因此性能不是问题。

0 投票
3 回答
736 浏览

c# - 哈希集<-它在我的电脑上不起作用

我想在我的程序中使用 HashSet。

但我无法声明 HashSet。

我的电脑安装了 Microsoft .Net FrameWork 3.5。

我还声明了命名空间。(使用 System.Collections.Generic)

但它没有用。

我如何解决这个问题?

我正在使用 Visual Studio 2005(c#) 和 Windows 7。

谢谢。