假设我们有一个包含 10000 多个随机字符串的字符串列表。 现在我传递一个字符串说“芒果”。 我需要检查 10000+ 字符串的列表是否包含这个名为“Mango”的字符串或者不忽略大小写。 哪种特定的搜索技术将是最优化的搜索技术。
字符串可以是任意长度。该字符串甚至可能在“国家代码”、“国家/地区”、“代码”之间有一个空格。这 3 个将被视为 3 个不同的字符串。我们必须搜索整个字符串,例如搜索“国家代码”而不是字符串列表中的子字符串“代码”。
如果我们使用预定义的方法,那么最好的情况可能是 O(1)。但最坏的情况可能是 O(10000+)。
根据您提供的信息,我将首先创建一个
HashSet<String>
,其中包含您的List<String>
中所有小写字符串实例。然后你可以用 O(1) 检查你的原始列表是否包含给定的字符串(忽略大小写)通过检查集合是否包含给定字符串的小写版本。
代码示例:
List<String> originalList = ...
String myGivenString = ...
HashSet<String> set = new HashSet<>();
originalList.forEach(e -> set.add(e));
System.out.println(set.contains(myGivenString.toLowerCase()));