问题标签 [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.
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 倍。
这些结果不一定适用于可变长度的字符串、更复杂的对象或不同的集合大小。
java - 空指针异常:空错误
我有这个哈希集代码,当我尝试在它上面运行我的编译方法时,我得到了 Null Pointer Exception: null 错误。这是代码:
与此错误相关的其他行是:
java - Java HashMap keySet() 迭代顺序是否一致?
我了解从 Map 的 keySet() 方法返回的 Set 不保证任何特定的顺序。
我的问题是,它是否保证多次迭代的顺序相同。例如
在上面的代码中,假设 map没有被修改,那么对 keySet 的迭代是否会按照相同的顺序进行。使用 Sun 的 jdk15 它确实以相同的顺序迭代,但在我依赖这种行为之前,我想知道是否所有 JDK 都会这样做。
编辑
我从答案中看到我不能依赖它。太糟糕了。我希望不必建立一些新的收藏来保证我的订购。我的代码需要迭代,执行一些逻辑,然后以相同的顺序再次迭代。我将从 keySet 创建一个新的 ArrayList 来保证顺序。
java - 在 HashMap 中使用 keySet() 方法
我有一种方法可以遍历板上的可能状态并将它们存储在 HashMap 中
}
我对这组键感兴趣。我应该怎么做才能全部打印出来?
HashSet t = map.keySet()
被编译器拒绝
.net-3.5 - 检索哈希集对象引用
HashSet<string>
如果我知道字符串存在,如何有效地获取对字符串的引用?
IE
谢谢!
fluent-nhibernate - 是否可以使用 Fluent NHibernate 约定将所有 ICollections 映射为集合?
是否可以使用 Fluent NHibernate 约定将所有 ICollections 映射为集合?我有一个像这样的实体:
使用流利的映射,此属性将被映射为HasMany(x => x.Animals).AsSet()
,但我将如何使用我想与自动映射器一起使用的约定来做到这一点?
默认情况下,我应该添加它,ICollections
将其持久化为ILists
,当它尝试将其转换为 时,我会得到一个转换HashSet
异常IList
。
c# - 如何在 .NET 中使用 Hashtables/HashSets?
我有一个大约 9000 种产品的列表,其中一些可能有重复。
我想用产品序列号作为它们的键来制作这些产品的哈希表,这样我就可以很容易地找到重复项。
如何在 C#/.NET 中使用 HashTable?HashSet 会更合适吗?
最终我想要一个像这样的列表:
密钥序列号:11110 - 包含:Product1
密钥序列号:11111 - 包含:Product3、Product6、Product7
密钥序列号:11112 - 包含:Product4
密钥序列号:11113 - 包含:Product8、Product9
所以,我有一个所有产品的列表,它们按具有重复序列号的产品分组。这样做的“正确”方法是什么?
java - 覆盖 HashSet 的 Contains 方法
谁能告诉我如何覆盖 HashSet 的 contains() 方法以使用正则表达式匹配而不是仅使用 equals()?
或者,如果不是覆盖,我如何添加使用正则表达式模式的方法?基本上,我希望能够在包含字符串的 HashSet 上运行正则表达式,并且我需要使用正则表达式匹配子字符串。
如果我的方法不合适,请建议其他人。
谢谢你。:)
c# - LINQ 中用于迭代 HashSet 的巧妙替代方案
我有一个我正在使用的 URL 的白名单,在HashSet<string>
. 我正在尝试查找是否以url
白名单中的任何项目开头(必须如此)。
编辑:前面的例子有点误导并且有一个错字——我已经有一个像 yahoo.com 这样的基本 url,白名单只是路径。
是否有更优雅的方式使用 LINQ(对象)进行此查找?该列表并不大,因此性能不是问题。
c# - 哈希集<-它在我的电脑上不起作用
我想在我的程序中使用 HashSet。
但我无法声明 HashSet。
我的电脑安装了 Microsoft .Net FrameWork 3.5。
我还声明了命名空间。(使用 System.Collections.Generic)
但它没有用。
我如何解决这个问题?
我正在使用 Visual Studio 2005(c#) 和 Windows 7。
谢谢。