【问题标题】:Updating a java map entry更新 java 映射条目
【发布时间】:2010-11-06 22:08:16
【问题描述】:

我面临一个似乎没有直接解决方案的问题。

我正在使用java.util.Map,我想更新键值对中的值。

现在,我正在这样做:

private Map<String,int> table = new HashMap<String,int>();
public void update(String key, int val) {
    if( !table.containsKey(key) ) return;
    Entry<String,int> entry;
    for( entry : table.entrySet() ) {
        if( entry.getKey().equals(key) ) {
            entry.setValue(val);
            break;
        }
    }
}

那么有没有什么方法可以让我获得所需的Entry 对象而不必遍历整个Map?或者有什么方法可以更新条目的值吗? Map 中的一些方法,比如setValue(String key, int val)

jrh

【问题讨论】:

  • PS:它的 table.entrySet()。我在这里打错了。
  • 您可以删除第一个“if”语句。如果密钥不存在,它仍然会导致整个地图迭代。如果您删除它,您仍将遍历整个地图,如果密钥不存在,则不执行任何操作。现在,如果键存在,您遍历映射,发现它存在,然后再次遍历条目。

标签: java map in-place


【解决方案1】:

使用

table.put(key, val);

添加新的键/值对或覆盖现有键的值。

来自 Javadocs:

V put(K key, V value):将指定值与此map中的指定键关联起来(可选操作)。如果映射先前包含键的映射,则旧值将替换为指定值。 (当且仅当 m.containsKey(k) 将返回 true 时,映射 m 才被称为包含键 k 的映射。)

【讨论】:

  • 作为参考,在 Java 8 中有一个 putIfAbsent() 方法以防有人不想更新。
【解决方案2】:

如果存在键 table.put(key, val) 将覆盖该值,否则它将创建一个新条目。噗!你就完成了。 :)

您可以通过使用键从地图中获取值是table.get(key); 就是这样

【讨论】:

    【解决方案3】:

    您只需使用method

    public Object put(Object key, Object value)
    

    如果键已经存在于 Map 中,则返回之前的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多