怎样5个map超快速合并,相同键对应的值相加

Jobernowl 2011-06-23 06:50:49

HashMap<Integer, Integer> arm=new HashMap<Integer, Integer>();
HashMap<Integer, Integer> body=new HashMap<Integer, Integer>();
HashMap<Integer, Integer> head=new HashMap<Integer, Integer>();
HashMap<Integer, Integer> leg=new HashMap<Integer, Integer>();
HashMap<Integer, Integer> wst=new HashMap<Integer, Integer>();
.
.
.


我先定义五个hashmap 然后通过方法分别给这5个hashmap赋值,每个hashmap大约有5对键值(int类型,每个map大小不一样)
现在我想合并这五个map 关键就是 这五个map中有重复的key 我希望合并的时候相同的key所对应的value相加,并且效率要很高

比如第一个map内容是[1=3,4=-1,13=2,58=3];第二个map内容是[4=5,9=1,11=4,15=2,88=5,76=-4]...
...全文
1484 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
冒泡菜 2011-06-30
  • 打赏
  • 举报
回复
暴强!支持 支持 差距 差距
Darling_sheep 2011-06-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 alexandertech 的回复:]

Java code

import java.util.HashMap;

public class CombineMap {
public static HashMap<Integer,Integer> addTo(HashMap<Integer,Integer> target, HashMap<Integer,Integer>plus) {
Object[] os ……
[/Quote]
顶一个!
Jobernowl 2011-06-23
  • 打赏
  • 举报
回复
我怎么没想到呢 唉 新手跟老手的差距果然这么大 结贴了吧 现在时间只要300毫秒!!虽然不算太快 不过很满意了
Jobernowl 2011-06-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 alexandertech 的回复:]
Java code

import java.util.HashMap;

public class CombineMap {
public static HashMap<Integer,Integer> addTo(HashMap<Integer,Integer> target, HashMap<Integer,Integer>plus) {
Object[]……
[/Quote]


非常非常感谢 我试了一下 很不错
Jobernowl 2011-06-23
  • 打赏
  • 举报
回复

public void setSidpoint(int[] SID,int[] skillNum) {
List<Integer> armSid=this.equipArm.getSid();
List<Integer> armPoint=this.equipArm.getPoint();
HashMap<Integer,Integer> map1=new HashMap<Integer, Integer>();
for(int i=0;i<armSid.size();i++){
map1.put(armSid.get(i), armPoint.get(i));
}
List<Integer> bodySid=this.equipBody.getSid();
List<Integer> bodyPoint=this.equipBody.getPoint();
HashMap<Integer,Integer> map2=new HashMap<Integer, Integer>();
for(int i=0;i<bodySid.size();i++){
if(map1.containsKey(bodySid.get(i))){
Iterator<Map.Entry<Integer,Integer>> it=map1.entrySet().iterator();
while(it.hasNext()){
Map.Entry<Integer, Integer> entry=it.next();
int key=entry.getKey();
int value=entry.getValue();
if(key==bodySid.get(i)){
value+=bodyPoint.get(i);
}
map1.put(key, value);
}
}
map2.put(bodySid.get(i), bodyPoint.get(i));
}
map2.putAll(map1);
List<Integer> headSid=this.getEquipHead().getSid();
List<Integer> headPoint=this.getEquipHead().getPoint();
HashMap<Integer,Integer> map3=new HashMap<Integer, Integer>();
for(int i=0;i<headSid.size();i++){
Iterator<Map.Entry<Integer,Integer>> it=map2.entrySet().iterator();
while(it.hasNext()){
Map.Entry<Integer, Integer> entry=it.next();
int key=entry.getKey();
int value=entry.getValue();
if(key==headSid.get(i)){
value+=headPoint.get(i);
}
map2.put(key, value);
}
map3.put(headSid.get(i), headPoint.get(i));
}
map3.putAll(map2);
List<Integer> legSid=this.getEquipLeg().getSid();
List<Integer> legPoint=this.getEquipLeg().getPoint();
HashMap<Integer,Integer> map4=new HashMap<Integer, Integer>();
for(int i=0;i<legSid.size();i++){
Iterator<Map.Entry<Integer,Integer>> it=map3.entrySet().iterator();
while(it.hasNext()){
Map.Entry<Integer, Integer> entry=it.next();
int key=entry.getKey();
int value=entry.getValue();
if(key==legSid.get(i)){
value+=legPoint.get(i);
}
map3.put(key, value);
}
map4.put(legSid.get(i), legPoint.get(i));
}
map4.putAll(map3);
List<Integer> wstSid=this.getEquipWst().getSid();
List<Integer> wstPoint=this.getEquipWst().getPoint();
HashMap<Integer,Integer> map5=new HashMap<Integer, Integer>();
for(int i=0;i<wstSid.size();i++){
Iterator<Map.Entry<Integer,Integer>> it=map4.entrySet().iterator();
while(it.hasNext()){
Map.Entry<Integer, Integer> entry=it.next();
int key=entry.getKey();
int value=entry.getValue();
if(key==wstSid.get(i)){
value+=wstPoint.get(i);
}
map4.put(key, value);
}
map5.put(wstSid.get(i), wstPoint.get(i));
}
map5.putAll(map4);
Iterator<Map.Entry<Integer, Integer>> it=map5.entrySet().iterator();
List<Integer> tempsid=new ArrayList<Integer>();
List<Integer> temppoint=new ArrayList<Integer>();
while(it.hasNext()){
Map.Entry<Integer, Integer> entry=it.next();
int key=entry.getKey();
int value=entry.getValue();
if(key==001){
for(int i=0;i<bodySid.size();i++){
tempsid.add(bodySid.get(i));
temppoint.add((bodyPoint.get(i))*value);
}
}
}
HashMap<Integer,Integer> tempmap=new HashMap<Integer, Integer>();
for(int i=0;i<tempsid.size();i++){
Iterator<Map.Entry<Integer, Integer>> it1=map5.entrySet().iterator();
while(it.hasNext()){
Map.Entry<Integer, Integer> entry=it1.next();
int key=entry.getKey();
int value=entry.getValue();
if(key==tempsid.get(i)){
value+=temppoint.get(i);
}
map5.put(key, value);
}
}
tempmap.putAll(map5);
this.sidpoint=tempmap;

boolean flag=false;
for(int i=0;i<SID.length;i++){
Iterator<Map.Entry<Integer, Integer>> iterator=this.sidpoint.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Integer, Integer> entry=iterator.next();
int key=entry.getKey();
int value=entry.getValue();
flag=false;
if(key==SID[i]&&value>=skillNum[i]){
flag=true;
break;
}
}
if(!flag){
break;
}
}
this.isequipment=flag;
}


这是以前的代码 我现在把10个list合并成5个map
飞跃颠峰 2011-06-23
  • 打赏
  • 举报
回复

import java.util.HashMap;

public class CombineMap {
public static HashMap<Integer,Integer> addTo(HashMap<Integer,Integer> target, HashMap<Integer,Integer>plus) {
Object[] os = plus.keySet().toArray();
Integer key;
for (int i=0; i<os.length; i++) {
key = (Integer)os[i];
if (target.containsKey(key))
target.put(key, target.get(key) + plus.get(key));
else
target.put(key, plus.get(key));
}
return target;
}

public static void main(String[] args) {
// 获得arm,body,head,leg,wst
// ......
HashMap<Integer,Integer> all = new HashMap<Integer,Integer>();
all = addTo(all,arm);
all = addTo(all,body);
all = addTo(all,head);
all = addTo(all,leg);
all = addTo(all,wst);
}
}
Jobernowl 2011-06-23
  • 打赏
  • 举报
回复
问题是我要在5个嵌套for循环里调用获得总map的方法 速度会变慢很多的 请问怎么解决 我开始用常规的方法写了一大串 把那行方法注释之后 时间是280毫秒左右 不注释时间是1500毫秒左右
bayougeng 2011-06-23
  • 打赏
  • 举报
回复
一定要先做5个,然后再合并么?
可以试试自己写一个implements Map,或者extends HashMap也可。
其实你一共就25对值,用常规方法加一下就OK了,这点内容的话,效率没有办法体现的。

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧