更新Java映射条目


74

我面临着一个似乎无法解决的问题。

我正在使用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)

r


PS:其table.entrySet()。我在这里打错了。
jrharshath,2009年

您可以删除第一个“ if”语句。如果没有密钥,它仍然会导致整个迭代。如果删除它,您仍将遍历整个地图,并且如果不存在该密钥,则不执行任何操作。现在,如果该键存在,则可以遍历地图,找到它,然后再次遍历条目。
桑迪·西蒙顿

Answers:


158

采用

table.put(key, val);

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

从Javadocs:

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


作为参考,在Java 8中,有一个putIfAbsent()方法以防有人不想进行更新。
Arcturus

13

如果存在key,table.put(key, val)将覆盖该值,否则它将创建一个新条目。of!到此为止。:)

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


6

你只用方法

public Object put(Object key, Object value)

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.