在哈希表中插入值时修改哈希表值

时间:2018-12-20 15:53:55

标签: java hashmap

我正在读取数据库并填充哈希表,我的键是一个字符串,例如"1-1",这是一个字符串,并且它是唯一的(我检查了很多次),并且我的值是一个具有其他值的对象对象作为属性。问题在于,当我填充哈希表时,某些条目的最后一个属性MethodTrace.Method.Owner.DeveloperGold的值错误。

该值在第一次迭代中设置正确,但是当我在下一次迭代或循环结束时重新打印相同的值时,我最终得到了错误的值

System.out.println("WE ARW IN THE LOOP "+methodtraceHashMap.get("1-1"));

由于某种原因,感觉像是在

中设置的最后一个值
MethodTrace.Method.Owner.DeveloperGold = myresults.getString("ownergold");

被分配并放入哈希表中与键"1-1"对应的条目的值。我不太确定如何解决此问题。

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= 
 myresults.getString("ownergold"); 

         System.out.println(reqMethod+"-");

System.out.println(MethodTrace.Method.Owner.DeveloperGold);

        methodtraceHashMap.put(reqMethod, MethodTrace);
        System.out.println("WE ARW IN THE LOOP 
 "+methodtraceHashMap.get("1-1"));

    }

3 个答案:

答案 0 :(得分:0)

尝试此操作并打印哈希图,看看是否仍然存在覆盖问题

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

答案 1 :(得分:0)

我建议您通过以下临时更正来调试代码:

if (methodtraceHashMap.put(reqMethod, MethodTrace) != null)
   throw new RuntimeException("key '" + reqMethod + "' duplication");

由于您将String用作哈希映射键,因此自定义hashCode不会有问题。我敢肯定,您的密钥是唯一的,您必须找出确切的密钥,然后对其进行修复。

答案 2 :(得分:0)

我认为您(或您正在使用的库)覆盖了要存储在hashCode中的对象的HashMap。要解决此问题,您应该使用通过哈希码搜索(并插入)元素的地图