Я перебираю хэш-карту, состоящую из строковых ключей и имеющую объекты в качестве значений, и я устанавливаю атрибуты объектов.Значение моего hashmap - это объект, который имеет другие объекты в качестве атрибутов.Проблема заключается в том, что как только я устанавливаю значение для первого объекта с помощью ключа "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», которое я получаю, на самом деле соответствует значению methodtraceHashMap2.get («2-1»). Method.Owner.getDeveloperGold (), который был установлен длявторая запись моего hashmap с ключом "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.Method.Owner.DeveloperGold из MethodTrace, я не верю, что проблема связана с фрагментом ниже
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"));
}