【问题标题】:Set operations on Map在地图上设置操作
【发布时间】:2023-03-30 20:55:01
【问题描述】:

如何对HashMap 执行集合操作,例如Collections.addAll()

【问题讨论】:

  • 要添加的值将是一个字符串数组。
  • ...那么键是什么?您能否更详细地说明您具体要完成的工作?
  • 字符串将是键。没有价值(至少在实践中)。我只想要地图的 O(1) 查找。
  • 无值映射给你什么是集合没有的?
  • HashSet 具有与 HashMap 相同的查找性能特征。事实上,HashSet 是按照HashMap 来实现的。只需使用HashSet 而不是尝试使用没有值的HashMap

标签: java map hashmap


【解决方案1】:

根据您提出的问题,我认为您真正需要的是集合而不是地图。

试试

Set<String> mySet = new HashSet<String>();
mySet.addAll(...);

使用mySet.contains("someString"); 快速确定值是否存在。它应该等同于您似乎正在尝试做的事情。

【讨论】:

    【解决方案2】:

    例如通过Map.putAll

    您也可以直接对一组映射条目进行集合操作,您可以通过Map.entrySet 获取这些条目。

    来自the documentation

    返回此映射中包含的映射的 Set 视图。 集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。

    【讨论】:

    • entrySetkeySet 都不支持 addaddAll 但是,正如您引用的文档所说的那样。
    【解决方案3】:

    这边:

    hashMap.putAll(map);
    

    来自documentation

    从 指定映射到此映射 这些 映射将替换任何映射 这张地图有任何钥匙 目前在指定的地图中。

    【讨论】:

      【解决方案4】:

      你可以做类似的操作

      Map<String, String> map = new HashMap<String, String>();
      Set<String> set = map.keySet();
      for(String s: set);
      set.retainAll(set2); // keeps the keys in set2
      set.removeAll(set3); // removes the keys in set3
      set.remove(s);
      

      您还可以在集合中转动地图。没有 ConcurrentHashSet 但你可以做

      Set<String> set = Collections.setFromMap(new ConcurrentHashMap<String, Boolean>());
      

      【讨论】:

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