使用数组基于公共密钥添加值

时间:2013-01-25 12:52:14

标签: java arrays map

我有2个数组String key[]long value[]。密钥可以重复。我需要在地图中使用唯一键及其值的总和。下面是我正在尝试的代码,但我得到了Array out of bound exception

public HashMap < String, Long > getValueMap(String key[], long value[]) {
    Map newmap = new HashMap();
    long count = 0;
    for (int i = 0; i < value.length; i++) {
        for (int j = 0; j < value.length; j++) {
            if (key[i] == key[j]) {
                count = count + value[j];
            }
        }
        newmap.put(key[i], count);

        count = 0;
    }
    return (HashMap < String, Long > ) newmap;

}


long[] value = {};
String key[] = {};
int i = 0;
        if(!worklogs.isEmpty()){
            for(Worklog wl:worklogs){
                value[i]=wl.getValue();
                key[i]=wl.getAuthor();i++;

            }
        }

HashMap < String, Long > newhm = getValueMap(key, value);
Iterator entries = newhm.entrySet().iterator();
while (entries.hasNext()) {
    Map.Entry entry = (Map.Entry) entries.next();
    String newkey = (String) entry.getKey();
    Long newvalue = (Long) entry.getValue();
    System.out.println("Key = " + newkey + ", Value = " + newvalue);
}

修改上面的代码使其看起来很简单。请有人帮忙吗?

4 个答案:

答案 0 :(得分:1)

Key[]可能比value[]短。

答案 1 :(得分:1)

替换

     for(i,i<10,i++){

使用

for(i, i<Value.length(); i++){

答案 2 :(得分:1)

这里数组长度等于0

long[] value = {};

这里你尝试设置值并得到一个错误,因为数组长度== 0

value[i] = wl.getValue();

使用value.length代替幻数10

for(int i = 0; i < value.length; i++){  
   key[i] = wl.getAuthor();
}

答案 3 :(得分:1)

这可能是因为在尝试向它们添加值之前尚未初始化数组值和键。

long[] value= new long[10];

String key[]= new String[10];

为什么需要使用数组而不是列表?因为如果你需要长度到变量我认为这将是一个更舒适的方法。