【问题标题】:LinkedHashMap, functionality within method?LinkedHashMap,方法中的功能?
【发布时间】:2014-05-01 20:00:32
【问题描述】:

以下方法如何工作?

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

【问题讨论】:

  • 增强的for循环适用于所有实现java.lang.Iterable的实例

标签: java arraylist linkedhashmap


【解决方案1】:

该方法遍历LinkedHashMap中当前所有的key:

for (String s : Pairs.keySet()) {

如果映射中与此键关联的值等于传递的参数,我们将此键保存在列表中matchedNames

if (phoneticName.equals(Pairs.get(s))) {
    matchedNames.add(s);
}

然后我们返回键的列表,其值等于传递的参数phoneticName

【讨论】:

    【解决方案2】:

    基本增强的 for 循环适用于所有可迭代的集合。

    所以在我们的例子中,如果我们采用 LinkedHashMap ,它就不能直接迭代,因为 1)它不是一个集合,它是一个键值对。

    2)我们不能通过迭代直接获取键值。

    所以我们需要获取密钥并将它们放入某个集合中,比如集合。

    为什么要设置?因为地图将具有唯一(无重复)键,所以他们实现了一个方法 在名为 keySet 的映射中。

    所以 map.keySet() 返回键的集合。

    现在我们可以轻松地使用 for 循环进行迭代,因为 set 是可迭代的。

    所以我们写了

    for (String s : Pairs.keySet())
    

    现在上述语法中的每个 s 都是一个字符串,每次迭代时一个一个地来自 keySet。

    现在将传递的名称与映射中相应键的值进行比较,如果它们相等,则将该名称添加到列表中

    Pairs.get(s) -> 给出键 s 的映射值。

    if (phoneticName.equals(Pairs.get(s))) {
        matchedNames.add(s);
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 2011-02-19
      相关资源
      最近更新 更多