HashMap值(对象)被不正确的值错误地覆盖

时间:2018-12-20 20:41:56

标签: hashmap override

我正在遍历由字符串键组成并且具有对象作为值的哈希图,并且正在设置对象的属性。我的哈希图的值是一个具有其他对象作为属性的对象。问题是,一旦我用键“ 1-1”设置了第一个对象的值,在第二次迭代中,当我想为我的第二个键“ 2-1”设置值时,该值对应于在最后被第二个条目的值覆盖之前被分配了,换句话说,第一个条目的属性值最终被第二个条目对应的属性值覆盖了。更具体地说,对于键“ 1-1”,在我的哈希图的第一次迭代中,当我打印methodtraceHashMap2.get(“ 1-1”)。Method.Owner.getDeveloperGold()时,我得到的值是“ T”,然后当我移至第二个键的值为“ 2-1”时,我在重印methodtraceHashMap2.get(“ 1-1”)。Method.Owner.getDeveloperGold()时得到一个不同的值,即“ N”,实际上实际上应该是“ T”,我实际上得到的“ N”与方法traceHashMap2.get(“ 2-1”)。Method.Owner.getDeveloperGold()的值相对应。我的哈希映射的第二个条目,其键为“ 2-1”

for(MethodTrace MethodTrace: methodtraceHashMap2.values()) {

        String reqClass=MethodTrace.Requirement.ID+"-"+MethodTrace.Method.Owner.ID;  

        MethodTrace.Method.Owner.DeveloperGold=classTraceHashMap.get(reqClass).DeveloperGold; 
        System.out.println("yes");
    }
    System.out.println(methodtraceHashMap2.get("1-1").Method.Owner.getDeveloperGold());

这里是填充地图的代码段,但是当我填充MethodTrace的属性MethodTrace.Method.Owner.DeveloperGold时,问题出现在上一个代码段中,我不认为问题与下面的代码段相关联

ResultSet myresults = st.executeQuery("SELECT traces.* from traces");

    while (myresults.next()) {
        MethodTrace MethodTrace = new MethodTrace();
        Method method= new Method(); 
        Requirement requirement= new Requirement(); 
         requirement=RequirementHashMap.get(myresults.getString("requirementid")); 
         method = MethodHashMap.get(myresults.getString("methodid")); 

        MethodTrace.setMethod(method);
        MethodTrace.setRequirement(requirement);

        //checking whether the method is present in the superclasses


        MethodTrace.setGold(myresults.getString("goldfinal"));
        String reqMethod=MethodTrace.Requirement.ID+"-"+MethodTrace.Method.ID; 
        String reqClass=MethodTrace.Requirement.ID+"-"+MethodTrace.Method.Owner.ID;             
MethodTrace.Method.Owner.DeveloperGold=classTraceHashMap.get(reqClass).DeveloperGold; 

         System.out.println(reqMethod+"-");
         System.out.println(MethodTrace.Method.Owner.DeveloperGold);

         methodtraceHashMap2.putIfAbsent(reqMethod, MethodTrace);
        System.out.println("WE ARW IN THE LOOP "+methodtraceHashMap2.get("1-1"));
        methodtraceHashMap2.putIfAbsent(reqMethod+"_"+System.currentTimeMillis(), MethodTrace);
        System.out.println("WE ARW IN THE LOOP "+methodtraceHashMap2.get("1-1"));
    }

0 个答案:

没有答案