论坛首页 入门技术论坛

这个题真实变态 怎么改呐!!!

浏览 7631 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-05-10  
ddy
忘记写这个方法了。
equals()
0 请登录后投票
   发表时间:2007-05-10  
...equals和hashcode对于想放入Collection等东东的对象要配套写...
0 请登录后投票
   发表时间:2007-05-10  
这个是想考HASHCODE()和EQUALS(),不过题出的有点问题。在JDK1.5下是出不来结果的。
if (e.hash == hash && eq(k, e.key)) 
                return e.value;

0 请登录后投票
   发表时间:2007-05-10  
在 Effective Java 里面提过这种应该被禁止的做法。正常情况下,是不应该 override hashCode 和 equals 的
0 请登录后投票
   发表时间:2007-05-10  
jdk1.5是实现不了,因为:
1、在hashmap中是的get方法中是这样写的:
    if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
       return e.value;

e.hash = hash 可以通过重载student的hashCode()方法满足。
但是第二个条件,好像不能满足。
这里key是一个String “lily”,但是k是一个V型的数据。在String的equals方法中这样写的:
    public boolean equals(Object anObject) {
	if (this == anObject) {
	    return true;
	}
	if (anObject instanceof String) {
	    String anotherString = (String)anObject;
	    int n = count;
	    if (n == anotherString.count) {
		char v1[] = value;
		char v2[] = anotherString.value;
		int i = offset;
		int j = anotherString.offset;
		while (n-- != 0) {
		    if (v1[i++] != v2[j++])
			return false;
		}
		return true;
	    }
	}
	return false;
    }

因为k既不是String对象,和”lily”又不是同一个引用,所以无法满足。
1 请登录后投票
   发表时间:2007-05-10  
重写jvm中的string
equles(){
return true;
}
为什么不能满足?
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics