我目前正在使用HashMap<String, Integer>
它填充类型的键,String
比如说,5 个字符长。如何搜索 4 个字符或更少字符的特定键,该键是其他键的一部分和开头,并将所有命中作为一个集合<Key, Value>
?
8 回答
除非您创建自定义数据结构,否则迭代是您唯一的选择:
for (Entry<String, Integer> e : map.entrySet()) {
if (e.getKey().startsWith("xxxx")) {
//add to my result list
}
}
如果您需要更节省时间的东西,那么您需要一个地图实现,您可以在其中跟踪这些部分键。
这似乎是一个用例,TreeMap
而不是HashMap
. 不同之处在于 TreeMap 保留了顺序。因此,您可以更快地找到部分匹配项。您不必遍历整个地图。
您不能通过 来执行此操作HashMap
,您应该编写自己的实现以Map
在地图中实现基于字符串长度的搜索。
Map<String, Integer> result = new HashMap<String, Integer>;
for(String key : yourMap.keySet()) {
if(key.length() == 4){
result.put(key, yourMap.get(key);
}
}
执行此代码后,您将拥有所有带有 4 个字母键的键/值对result
。
Set<Entry<String, Integer>> s1 = map.entrySet();
for (Entry<String, Integer> entry : s1) {
if(entry.getKey().length == 4)
//add it to a map;
}
首先将条目设置为您的哈希图。遍历集合并检查每个键的长度并将其添加到地图或根据需要使用它。
与HashMap<String, Integer>
您一起只能通过键和模式进行keySet()
操作contains()
。String
您可以尝试这种方法:
public Map<String,Integer> filterMap(Map<String, Integer> inputMap){
Map<String, Integer> resultHashMap = new HashMap<String, Integer>();
for (String key : inputMap.keySet()) {
if(key.length()==5){
resultHashMap.put(key,inputMap.get(key));
}
}
return resultHashMap;
}
如前所述,没有一种非常有效的*方法可以使用您指定的数据结构来完成它。但是,如果您添加一个附加项Map<Integer, List<String>>
来跟踪从字符串长度到具有该长度的所有键的列表的映射,那么您将能够非常有效地执行此操作。
*仅使用 Map<String, Integer>,您将需要遍历较大映射的整个容量,而添加此补充数据结构将强制执行 O(1) 查找(假设您使用了 HashMap),然后仅遍历结果集,这是可能的最快结果。