什么数组/集合对象对于"包含"最有效。功能?

时间:2014-03-19 20:49:16

标签: java arrays

请原谅糟糕的头衔。

我有一个大约430个静态"保留字"的列表,每个字长在2到20个字符之间。应用程序上的进程偶尔运行,需要针对这组保留字检查(可能数十个)数千个字符串,以确保它们都是有效的。

是否有最适合此要求的java对象?一个可能排序的?

1 个答案:

答案 0 :(得分:3)

如果要使用标准对象,请使用 HashSet 。在理想情况下它具有O(1)访问时间。如果存在碰撞,它会降级(理论上与O(n)相比)。由于您事先知道了字符串集,因此您可以稍微使用负载因子来最小化冲突。理论上,您还可以通过将字符串包装在自定义对象中来提供自定义哈希函数(这将允许您优化函数以分配字符串)。但除非你的字符串在某种程度上非常特殊,否则我认为这样做会有点过分。

如果您想/可以使用第三方库:您可以使用 trie 有限状态自动机。他们会非常快。

我建议:首先使用HashSet ,因为它随每个java一起提供。如果您发现需要更快的东西,请寻找合理的trie实现。但我希望您会看到 hashset足够快