LinkedHashMap,方法中的功能?

时间:2014-05-01 20:00:33

标签: java arraylist linkedhashmap

以下方法如何运作?

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;
        }
    }

2 个答案:

答案 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);
}

在方法结束时返回这个新形成的匹配列表。