我正在读取数据库并填充哈希表,我的键是一个字符串,例如"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"));
}
答案 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
。要解决此问题,您应该使用通过哈希码搜索(并插入)元素的地图