gpt4 book ai didi

java - 查找字符串值的最快方法

转载 作者:行者123 更新时间:2023-11-29 10:06:14 25 4
gpt4 key购买 nike

我有一个简单的应用程序,它从大文本文件中读取小字符串数据并将它们保存到数据库中。为了实际保存每个这样的字符串,应用程序多次(可能数千次或更多次)调用以下方法:

setValue(String value)
{
if (!ignore(value))
{
// Save the value in the database
}
}

目前,我通过连续比较一组字符串来实现 ignore() 方法,例如

public boolean ignore(String value)
{
if (value.equalsIgnoreCase("Value 1") || (value.equalsIgnoreCase("Value 2"))
{
return true;
}

return false;
}

但是,因为我需要检查许多这样的“可忽略”值,这些值将在代码的另一部分定义,所以我需要使用数据结构来进行此检查,而不是多个连续的 if语句。

所以,我的问题是,从标准 Java 到实现这个最快的数据结构是什么? HashMap ?一套?还有别的吗?

初始化时间不是问题,因为它将静态发生并且每次应用程序调用一次。

编辑:到目前为止建议的解决方案(包括 HashSet)似乎比仅使用带有所有被忽略的单词的 String[] 并针对每个单词运行“equalsIgnoreCase”要慢。

最佳答案

使用 HashSet ,以小写形式存储值,及其 contains()方法,它具有比 TreeSet 更好的查找性能(contains 的恒定时间与对数时间)。

Set<String> ignored = new HashSet<String>();
ignored.add("value 1"); // store in lowercase
ignored.add("value 2"); // store in lowercase

public boolean ignore(String value) {
return ignored.contains(value.toLowerCase());
}

以小写形式存储值并搜索小写输入避免了在 比较期间处理大小写的麻烦,因此您可以全速执行 HashSet 实现和编写与集合相关的零代码(例如整理器、比较器等)。

已编辑
感谢 Jon Skeet 指出某些土耳其语字符在调用 toLowerCase() 时行为异常,但如果您不打算支持土耳其语输入(或可能存在非标准大小写问题的其他语言),那么这种方法对你很有效。

关于java - 查找字符串值的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7469306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com