【问题标题】:Map values being added to ArrayList映射值被添加到 ArrayList
【发布时间】:2020-04-07 06:31:24
【问题描述】:

我无法理解最后一行代码的有效性。

class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
    if (strs.length == 0) return new ArrayList();
    Map<String, List> ans = new HashMap<String, List>();
    for (String s : strs) {
        char[] ca = s.toCharArray();
        Arrays.sort(ca);
        String key = String.valueOf(ca);
        if (!ans.containsKey(key)) ans.put(key, new ArrayList());
        ans.get(key).add(s);
    }
    return new ArrayList(ans.values());
}

}

代码行:“return new ArrayList(ans.values());” 这些值是否被一一插入-到底发生了什么?

【问题讨论】:

  • 你能澄清你的问题你到底想要什么吗?
  • @Parth Pitroda 答案是返回一个数组列表。哈希映射具有数组列表形式的值。我只是想知道如何“返回新的 ArrayList(ans.values());”正在将数组列表转移到另一个数组列表中。
  • ans.values() bcz 你的地图值是列表类型,这就是你得到arraylist的原因。

标签: java arraylist syntax hashmap


【解决方案1】:

return new ArrayList(ans.values())
分解并查看每个说明
1。 new ArrayList - 填充了一些值的新对象
2 ans.values() - 来自collection 的值:Map&lt;K,V&gt; 并且该方法返回all V
注意VListall V 应该是所有Lists 的串联(假设引用)

【讨论】:

  • 还要注意 ans.put(key, new ArrayList()) ,基本上它是在 key 添加 empty List 不确定这是否有用。所以All Lists 是对empty List 总和的引用。就像代码一样好,但是当你在大多数情况下添加一些东西时,可能需要它的值。 (例如:new ArrayList&lt;String&gt;( Arrays.asList("value1", "value2", "value3")
【解决方案2】:

ans.values() 返回Collection&lt;List&lt;String&gt;&gt;,你需要返回List&lt;List&lt;String&gt;&gt;。 ArrayList 类具有以 Collection 为参数的构造函数,参见docs

【讨论】:

    【解决方案3】:

    根据java doc ArrayList 类具有可以从指定集合构造元素列表的构造函数。 HasMap 也是接口集合的实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多