以下方法如何运作?
Pairs是一个LinkedHashMap,我只是不确定增强的for循环以及它如何与hasmap一起使用。即密钥集。
/**
* Finds all names in the initial input list that match phonetically with
* the supplied name
*
* @param phoneticName
* The name for which you want to find matches
* @return An ArrayList of all phonetically matching names
*/
public ArrayList<String> findMatchingNames(String phoneticName) {
ArrayList<String> matchedNames = new ArrayList<>();
for (String s : Pairs.keySet()) {
if (phoneticName.equals(Pairs.get(s))) {
matchedNames.add(s);
}
}
return matchedNames;
}
}
答案 0 :(得分:1)
该方法遍历当前LinkedHashMap
中的所有密钥:
for (String s : Pairs.keySet()) {
如果地图中与此键相关联的值等于传递的参数,我们会将此键保存在列表matchedNames
中:
if (phoneticName.equals(Pairs.get(s))) {
matchedNames.add(s);
}
然后我们返回键列表,其值等于传递的参数phoneticName
。
答案 1 :(得分:0)
基本上增强的for循环适用于所有可迭代的集合。
所以在我们的情况下,如果我们使用LinkedHashMap,它不能直接迭代,因为 1)它不是一个集合,它是一个键值对。
2)我们无法迭代直接获取键值。
所以我们需要拿钥匙并将它们放入一些集合中,比如说。
为什么要设置?因为map将具有唯一(无重复)键,因此它们实现了一种方法 在名为keySet的地图内。
所以map.keySet()返回一组键。
现在我们可以使用for循环轻松迭代,因为set是可迭代的。
所以我们写了
for (String s : Pairs.keySet())
现在上面语法中的每个s都是一个字符串,它在每次迭代时逐个来自keySet。
现在将传递的名称与地图内相应键的值进行比较,如果它们相等,则将该名称添加到列表中
Pairs.get(s)
- &gt;给出键的映射值。
if (phoneticName.equals(Pairs.get(s))) {
matchedNames.add(s);
}
在方法结束时返回这个新形成的匹配列表。