哈希图中的某个键的值设置为另一个键的值

时间:2018-11-08 17:05:55

标签: java hashmap maps

在创建的哈希图中,不同键的值存在问题。不知何故,这些值被最新的附加值所覆盖。

例如:

map.put("String1", "123")
map.put("String2", "456")
System.out.println(map.get("String1")); //would print 456

我的哈希图是:

Map<String, Testing> systems = new HashMap<>();

测试:

class Testing {

    private double[] ap;
    private double[] dcg;
    private double[] ndcg;

    public Testing(double[] _ap, double[] _dcg, double[] _ndcg){

        ap = _ap;
        dcg = _dcg;
        ndcg = _ndcg;

    }

    public double[] getAp(){

        return ap;

    }

    public double[] getDcg(){

         return dcg;

    }

    public double[] getNdcg(){

        return ndcg;

    }

}

这是问题所在(f是文件):

systems.put(f.getName(), new Testing(ap, dcg, ndcg));

if(f.getName().equals("input.Flab9atdnN.gz") || 
    f.getName().equals("input.apl9lt.gz")) {
        System.out.println(f.getName() + ": " + 
        systems.get(f.getName()).getAp()[5]);
}

if(f.getName().equals("input.Flab9atdnN.gz")) {
    System.out.println(f.getName().equals("input.Flab9atdnN.gz"));
    double temp = systems.get("input.apl9lt.gz").getAp()[5];
    double temp2 = systems.get("input.Flab9atdnN.gz").getAp()[5];
    System.out.println("input.Flab9atdnN.gz: " + temp2 + ". input.apl9lt.gz: 
    " + temp);
}

第一次打印为键“ input.Flab9atdnN.gz”和键“ input.apl9lt.gz”给出了不同的值。

System.out.println(f.getName() + ": " + systems.get(f.getName()).getAp() 
[5]);

最后一个打印语句为键“ input.Flab9atdnN.gz”赋予相同的值,但为键“ input.Flab9atdnN.gz”赋予键“ input.apl9lt.gz”的值。在键“ input.apl9lt.gz”之后将键“ input.Flab9atdnN.gz”添加到哈希图中,因此在键“ input.Flab9atdnN.gz”之后添加的任何内容也将使新键值也变为“ input.Flab9atdnN.gz”

double temp = systems.get("input.apl9lt.gz").getAp()[5];
double temp2 = systems.get("input.Flab9atdnN.gz").getAp()[5];
System.out.println("input.Flab9atdnN.gz: " + temp2 + ". input.apl9lt.gz: " + 
temp);

这是为什么的任何线索,以及任何可能的解决方法?我尝试对列表执行类似操作,但遇到了相同的问题。我也尝试不使用测试。

谢谢。

编辑(用于输入):

input.apl9lt.gz

0.160837098024862 0.03075251487336594 0.22437008086531643 0.1971910732696186 0.26775040012743095 9.256258391747239E-4 0.1348288884102969 0.04098977989693765 0.22076261792825694 0.14351330413359978 0.4326923076923077 0.07127127472804279 4.552325182365065E-5 0.010058991520632703 0.013241228159087674 0.010137295467368818 0.16308220490382738 0.013974532767649097 0.1591821903406855 0.03546054590978735 0.017811035142771457 0.09931683119953653 0.0012300123001230013 3.2100667693888034E-5 0.13463869607114665 0.056660951442691745 0.009024064171122994 0.00111158621285874 0.19147531389263409 6.058415656054187E-4 0.15122464967762936 0.017945455244915694 0.24100308685261787 6.295914132164171E-4 0.41666666666666663 0.16054778554778554 0.12606805722666745 0.03122700118062138 0.05840908368719257 0.06151876506910154 8.167932696234583E-5 0.48663786619303134 0.0017420658249683476 0.20520161886380303 7.111269849728675E-5 0.1157176972265951 0.28587824256374156 0.032836748137528377 0.04182754182754183 0.02944176265259386

input.Flab9atdnN.gz

0.4550531747779656 0.11354712610736152 0.4465970245283123 0.39990864084973815 0.23410193071725469 8.08015513897867E-5 0.11287817139653589 0.02255268670973833 0.30038335608865446 0.21267974099603318 0.6041666666666666 0.15726821262566176 0.15690222729126874 1.5053439710973956E-4 0.0843584401155248 0.5027027027027027 0.1873237718924946 0.005660813678763912 0.012321170992537366 0.0529994153272247 0.04489848129896188 0.016508461433080466 0.0 1.0736065674698058053E-4 0.07164253590778259 0.14083889573189318 0.024676040805073064 0.16099898114516484 0.16509562037628656 0.06488409960391041 0.22263263699157246 0.0568843663526689 0.4175364417422477 0.1106842493991619 0.15555555555555556 0.5416666666666666 0.4654817731306396 0.0930344930767678 0.344114561968089 0.1882981402539536 0.11698973634619976 0.4533746137676584 0.3389765988389732 0.475199277730597 0.08708693608991427 0.34790332410690694 0.035929746042875826 0.08056424630498706 0.20352743561030237 0.12758565977230674

将它们读入双精度数组(大小为50)。要使用Testing类,只需删除dcg和ndcg。

1 个答案:

答案 0 :(得分:2)

首先:

import java.util.HashMap;

public class MapPutExample {

    public final static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();
        map.put("String1", "123");
        map.put("String2", "456");
        System.out.println(map.get("String1")); //would print 456
    }
}

打印

  

123

所以:不,不是。

您尚未提供实际的代码,我们可以在其中看到如何向地图添加元素,但是鉴于Testing包含数组这一事实,我想您在从设置其值时不会初始化新数组文件。因此,您需要执行以下操作:

import java.util.HashMap;

public class MapPutExample {

    public final static void main(String[] args) throws Exception {
        HashMap<String, char[]> map = new HashMap<>();

        char[] buffer = new char[10];
        for (int i = 0; i < buffer.length; i++) {
            buffer[i] = (char) ('a' + i);
        }
        map.put("String1", buffer);
        for (int i = 0; i < buffer.length; i++) {
            buffer[i] = (char) ('k' + i);
        }
        map.put("String2", buffer);
        System.out.println(map.get("String1")); //would print klmnopqrst
    }
}

这实际上打印

  

klmnopqrst

您需要创建新数组并将其设置为添加到地图的Testing实例:

import java.util.HashMap;

public class MapPutExample {

    public final static void main(String[] args) throws Exception {
        HashMap<String, char[]> map = new HashMap<>();

        char[] buffer = new char[10];
        for (int i = 0; i < buffer.length; i++) {
            buffer[i] = (char) ('a' + i);
        }
        map.put("String1", buffer);
        buffer = new char[10];
        for (int i = 0; i < buffer.length; i++) {
            buffer[i] = (char) ('k' + i);
        }
        map.put("String2", buffer);
        System.out.println(map.get("String1")); //would print klmnopqrst
    }
}

这是打印

  

abcdefghij