【问题标题】:how to manipulate HashMap while accessing? [closed]访问时如何操作HashMap? [关闭]
【发布时间】:2013-06-11 07:17:35
【问题描述】:

任何人都可以通过举例说明如何在访问条目时从 HashMap 中删除条目来帮助我。

【问题讨论】:

  • What have you tried 除了问我们吗?
  • “访问条目时”究竟是什么意思?我们是在谈论多个线程(使用 ConcurrentHashMap)还是在迭代条目时(使用 Iterator.remove)?

标签: java collections hashmap


【解决方案1】:

使用ConcurrentHashMap

支持检索的完全并发和可调整的更新预期并发的哈希表。

这是一个不错的example

【讨论】:

    【解决方案2】:

    通过条目迭代器:

    Map<String, String> myMap = new HashMap<String, String>();
    myMap.put("test", "test1");
    myMap.put("test2", "test2");
    Iterator<Entry<String, String>> it = myMap.entrySet().iterator();
    while(it.hasNext()) {
        if("test".equals(it.next().getKey())) {
            it.remove();
        }
    }
    

    【讨论】:

      【解决方案3】:

      最简单的方法是迭代密钥的副本:

      final Map<String, Integer> map = new HashMap<String, Integer>();
      map.put("test", 0);
      map.put("removeMe", 1);
      map.put("dontRemoveMe", 2);
      for (final String key : map.keySet().toArray(new String[map.keySet().size()]))
          if (key.startsWith("remove"))
              map.remove(key);
      

      但如果您的Map 大于几个条目,您可能会遇到性能不佳的情况,您可能希望使用iterator 删除:

      final Iterator<Entry<String, Integer>> iter = map.entrySet().iterator();
      while (iter.hasNext())
          if (iter.next().getKey().startsWith("remove"))
              iter.remove();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-23
        • 2016-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多