在下面的代码中,有没有什么方法可以调试hashcode和equals方法的实现code.If是的,我需要把断点放在那里。
PS:我已经附上了java源代码(src.zip)
public static void main(String[] args)
{
List<String>list=new ArrayList<String>();
list.add("ff");
list.add("gg");
System.out.println(list.hashCode());
List<String>list1=new ArrayList<String>();
list1.add("ff");
list1.add("gg");
System.out.println(list1.hashCode());
System.out.println(list.equals(list1));
System.out.println(list.hashCode()==list1.hashCode());
}谢谢,Vivek
发布于 2014-11-19 19:00:29
arrayList的默认equal和hashCode方法驻留在java.util.AbstractList下。如果你想调试你的代码,你可以在那个类中围绕这两个方法设置断点。
在内部,它会在列表中的每个字符串上调用equals。同样的情况也适用于hashCode,即它在列表中的每个字符串上调用hashCode。
简而言之,你的代码应该可以工作,你应该为两个列表找到相同的哈希码,它们也应该是相等的。
发布于 2014-11-19 19:05:04
ArrayList扩展了AbstractList,并且在AbstractList类的hashCode方法上有一个断点应该可以工作。
您可以很好地了解hashCode是如何计算的。
这是AbstractList类中hashCode()的实现。
public int hashCode() {
int hashCode = 1;
for (E e : this)
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
return hashCode;
}https://stackoverflow.com/questions/27015096
复制相似问题