Map中put(K key, V value)

Map put 方法详解
本文详细介绍了Map中put方法的功能及返回值。当指定键存在时,返回与该键之前关联的值;若不存在则返回null,支持null值的实现也会在原先与指定键关联为null时返回null。
Map中put(K key, V value)

返回:以前与指定键相关联的值,如果没有该键的映射关系,则返回 null。如果该实现支持 null 值,则返回 null 也可表明此映射以前将 null 与指定键相关联。
可以通过继承AbstractMap类并重写put方法来实现相同keyvalue相加的功能。具体实现如下: ```java import java.util.AbstractMap; import java.util.Map; public class SummingMap<K, V extends Number> extends AbstractMap<K, V> { private final Map<K, V> map; public SummingMap(Map<K, V> map) { this.map = map; } @Override public V put(K key, V value) { V oldValue = map.get(key); if (oldValue == null) { return map.put(key, value); } V newValue = sum(oldValue, value); return map.put(key, newValue); } private V sum(V oldValue, V value) { if (oldValue instanceof Double || value instanceof Double) { return (V) Double.valueOf(oldValue.doubleValue() + value.doubleValue()); } else if (oldValue instanceof Float || value instanceof Float) { return (V) Float.valueOf(oldValue.floatValue() + value.floatValue()); } else if (oldValue instanceof Long || value instanceof Long) { return (V) Long.valueOf(oldValue.longValue() + value.longValue()); } else { return (V) Integer.valueOf(oldValue.intValue() + value.intValue()); } } @Override public Set<Entry<K, V>> entrySet() { return map.entrySet(); } } ``` 在put方法中,首先获取当前key对应的旧值,如果旧值为null,则直接将新值加入map中;否则,计算出新值,并用新值替换旧值。 需要注意的是,value需要是Number的子类才能进行加法操作。由于加法可能涉及到不同类型的Number,因此在sum方法中进行了类型判断和转换。 使用时,可以将原始的Map传入SummingMap的构造函数中,即可得到一个支持相同keyvalue相加的Map。例如: ```java Map<String, Integer> map = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("a", 3); Map<String, Integer> summingMap = new SummingMap<>(map); summingMap.put("a", 4); System.out.println(summingMap); // 输出 {a=7, b=2} ``` 在这个例子中,原始的map中有两个key为"a"的值,分别为1和3。将原始map传入SummingMap的构造函数中得到summingMap,然后将新值4放入summingMap中,此时summingMapkey为"a"的值应为1+3+4=7,而key为"b"的值不变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值