Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么数组/集合对象对于“a”最有效;包括「;功能?_Java_Arrays - Fatal编程技术网

Java 什么数组/集合对象对于“a”最有效;包括「;功能?

Java 什么数组/集合对象对于“a”最有效;包括「;功能?,java,arrays,Java,Arrays,请原谅这个糟糕的标题 我有一个大约430个静态“保留字”的列表,每个字的长度在2到20个字符之间。应用程序上的一个进程偶尔会运行,这需要根据这组保留字检查数千个字符串(可能是上万个),以确保它们都有效 是否有最适合此需求的java对象?可能已排序的对象?如果要使用标准对象,请使用哈希集。在理想情况下,它有O(1)个访问时间。如果存在碰撞(理论上为O(n)),它会降低。因为您事先知道字符串集,所以可以稍微调整负载因子以最小化冲突。理论上,您还可以通过将字符串包装到自定义对象中来提供自定义哈希函数(

请原谅这个糟糕的标题

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


是否有最适合此需求的java对象?可能已排序的对象?

如果要使用标准对象,请使用哈希集。在理想情况下,它有O(1)个访问时间。如果存在碰撞(理论上为O(n)),它会降低。因为您事先知道字符串集,所以可以稍微调整负载因子以最小化冲突。理论上,您还可以通过将字符串包装到自定义对象中来提供自定义哈希函数(这将允许您根据字符串的分布优化函数)。但是,除非你的琴弦真的很特别,否则我认为这会是一种矫枉过正的表现

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


我的建议是:首先使用HashSet,因为每个java都附带了HashSet。如果您认为需要更快的速度,请寻找一个合理的trie实现。但是我希望您会看到哈希集足够快

哈希集就是这样做的。带有二进制搜索的排序列表将在o(log(n))中运行。HashSet在o(1)中运行。HashSet未排序。理想的结构是trie,因为它不需要计算hashcode。HashSet为+1。您不需要对其进行排序。FSA必须在编译时生成才能发挥优势,不是吗?是的。但是,由于您有成千上万个字符串,即使您在开始编译时使用fsa,您也应该从中受益。@JasonCn但是由于生成的FSM只是一个方法,所以它具有很好的缓存局部性。另一方面,Java的方法大小限制阻碍了这种方法,也就是说我现在要使用
HashSet
,因为它是现成的。然后,如果性能要求还没有满足,考虑进一步优化发现/实现实现代码< >代码>的代码的TIE/FSM,并可以作为替换来替换。@杰森C是正确的,假设他不需要Unicode字符串。但即便如此,fsa也会带来同样的并发症。