是的,为此,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 numbersString prefix = ...;for(Map.Entry<String,String> entry : filterPrefix(nameNum, prefix).entrySet()) { System.out.println(entry);}如果您希望前缀过滤器不取决于大小写差异,请为地图使用合适的Comparator(例如
Collator具有适当强度设置的或
String.CASE_INSENSITIVE_ORDER)。



