gpt4 book ai didi

java - 搜索 HashMap

转载 作者:行者123 更新时间:2023-12-01 19:18:28 24 4
gpt4 key购买 nike

您好,我正在使用dictionary.txt 文件填充 HashMap ,并将 HashMap 拆分为单词长度组。

我在 HashMap 中搜索“a*d**k”模式时遇到问题;

有人可以帮助我吗?

我需要知道如何搜索 Hashmap?

如果您能帮助我,我将非常感激。谢谢。

最佳答案

HashMap 对于模式搜索而言是错误的数据结构。

您应该研究具有开箱即用模式搜索功能的技术,例如 Lucene

<小时/>

并回答此评论:

Im using it for Android, and its the fastest way of searching.

HashMap 确实非常快,但前提是您按预期使用它们。在您的场景中,哈希码并不重要,因为您知道所有键都是数字,并且您可能不会有任何长度超过 30 个字母的单词。

那么为什么不直接使用 Array 或 Sets 的 ArrayList 而不是 HashMap 并将 map.get(string.length()) 替换为 list.get(string.length() -1)数组[string.length()-1]。我敢打赌,性能会比 HashMap 更好(但我们无法区分差异,除非你有一台非常旧的机器或无数的条目)。

我并不是说我的列表或数组设计更好,但您使用数据结构的目的并非如此。

<小时/>

说真的:将所有单词写入一个平面文件(每行一个单词,按单词长度排序,然后按字母顺序排序)并在该文件上运行正则表达式查询怎么样?如果文件太大,则流式传输文件并搜索各个行,或者如果 IO 太慢,则将其作为字符串读取并将其保留在内存中。

<小时/>

或者仅使用 TreeSet 和自定义 Comparator 怎么样?

示例代码:

public class PatternSearch{

enum StringComparator implements Comparator<String>{
LENGTH_THEN_ALPHA{

@Override
public int compare(final String first, final String second){

// compare lengths
int result =
Integer.valueOf(first.length()).compareTo(
Integer.valueOf(second.length()));
// and if they are the same, compare contents
if(result == 0){
result = first.compareTo(second);
}

return result;
}
}
}

private final SortedSet<String> data =
new TreeSet<String>(StringComparator.LENGTH_THEN_ALPHA);

public boolean addWord(final String word){
return data.add(word.toLowerCase());
}

public Set<String> findByPattern(final String patternString){
final Pattern pattern =
Pattern.compile(patternString.toLowerCase().replace('*', '.'));
final Set<String> results = new TreeSet<String>();
for(final String word : data.subSet(
// this should probably be optimized :-)
patternString.replaceAll(".", "a"),
patternString.replaceAll(".", "z"))){
if(pattern.matcher(word).matches()){
results.add(word);
}
}
return results;
}

}

关于java - 搜索 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5567549/

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