map put相同的key

Map添加相同的key

HashMap是的key是不能重复的,如果有相同的key,最后一个key对应的value会把前一个相同的value覆盖掉。

如果键是一个对象的话,不同的对象就是不同的key

但是如果一个对象内相同的值看做是同一个对象的话就在model里面重写HashCode()和equals()方法,map是先从key的hashcode()来决定在存入map哪个地方的哪个链,equals()来判断这条链上是否有重复的key。

俩个model对象结果只有一个,后面的把前面的覆盖了。

前面是键是对象的话,相同的key重复和不重复的俩个情况,但是如果key是String型的呢?key是不能有相同的string的,重复put相同的string,后面的会替换前面相同的key。

这里要介绍一个identityHashMap(),HashMap判断一个key是否相同是看key1.equals(key2)来判断,而IdentityHashMap判断一个key是否相同那个按key1==key2。所以只要是新的对象就会有新的地址就当做不同的key,不管key 的值是否相同。

转载于:https://www.cnblogs.com/qianxinxu/p/10717875.html

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过继承AbstractMap类并重写put方法来实现相同key的value相加的功能。具体实现如下: ```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的构造函数中,即可得到一个支持相同key的value相加的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、付费专栏及课程。

余额充值