gpt4 book ai didi

java - HashMap 中的部分搜索

转载 作者:IT老高 更新时间:2023-10-28 21:18:45 25 4
gpt4 key购买 nike

我需要创建电话簿之类的东西。它包含名称和编号。现在当我输入字母匹配列表时应该返回。对于下面给出的示例,当我键入 H 时,应返回包含 Harmer、Harris、Hawken、Hosler 的列表。当键入 Ha 时,应返回仅包含 Harmer、Harris、Hawken 的列表。

  Map<String, String> nameNum = new HashMap<String, String>();

nameNum.put("Brown", "+1236389023");
nameNum.put("Bob", "+1236389023");
nameNum.put("Harmer", "+1236389023");
nameNum.put("Harris", "+1236389023");
nameNum.put("Hawken", "+1236389023");
nameNum.put("Hosler", "+1236389023");

知道如何实现吗?提前致谢。

最佳答案

是的,HashMap 不是正确的数据结构。正如博卓所说,一个Trie会是正确的。

借助 Java 的板载工具,可以使用 TreeMap(或任何 SortedMap,实际上):

public <V> SortedMap<String, V> filterPrefix(SortedMap<String,V> baseMap, String prefix) {
if(prefix.length() > 0) {
char nextLetter = prefix.charAt(prefix.length() -1) + 1;
String end = prefix.substring(0, prefix.length()-1) + nextLetter;
return baseMap.subMap(prefix, end);
}
return baseMap;
}

输出甚至可以按键排序。

这里是一个用法示例:

SortedMap<String, String> nameNum = new TreeMap<String, String>();
// put your phone numbers

String prefix = ...;
for(Map.Entry<String,String> entry : filterPrefix(nameNum, prefix).entrySet()) {
System.out.println(entry);
}

如果您希望前缀过滤器不依赖于大小写差异,请为您的 map 使用合适的比较器(例如具有合适强度设置的 Collat​​or,或 String.CASE_INSENSITIVE_ORDER)。

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

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