equals(Object obj){
if(!(obj istanceof MyKey)){
return false;
}else if(name.equals(((MyKey)obj).name) && age == ((Mykey)obj).age) return true;
else return flase;
}
基本上大部分java类的equals方法,都是先判断一下类型是否一致。只有一致时才比较。
if(!(obj istanceof MyKey)){
return false;
}else if(name.equals(((MyKey)obj).name) && age == ((Mykey)obj).age) return true;
else return flase;
}
基本上大部分java类的equals方法,都是先判断一下类型是否一致。只有一致时才比较。
System.out.println((Integer)hs.get(m1));
//这句没得出预期结果,只得出null,但上面通过Enumeration接口就能迭代出所有的值。为什么这句这样写就不能得出相应的值?-----------------------------
你没有把ml加入到hs中去,当然get 不到了。加一句:
Mykey m1=new Mykey("alber",33);
hs.put(ml, new Integer(4));
System.out.println((Integer)hs.get(m1));
Mykey m1=new Mykey("alber",33);
hs.put(ml, new Integer(4));
System.out.println((Integer)hs.get(m1));
--------------------------------------------------------------
如你所说,在用GET的时候所使用的键参数是PUT的时候的对像引用?也就是说比较的时候是比较键对像引用对象内存地址是否跟GET参数所引用的对象的内存地址一样?
注意,JAVA中是值传递,修改了值之后要从新加到HASH表中,否则修改无效.
----------------------------------------------------------------
java的对象是传值还是传址?
Mykey m1=new Mykey("alber",33);
hs.put(ml, new Integer(4));
System.out.println((Integer)hs.get(m1));
--------------------------------------------------------------
请问非典型:
如你所说,在用GET的时候所使用的键参数是PUT的时候的对像引用?也就是说比较的时候是比较键对像引用对象内存地址是否跟GET参数所引用的对象的内存地址一样?另:请问明月
我什么时候修改了值?我的意图是想取回我指定的键所对应的值。
hs.put(new Mykey("joe",12),new Integer(1));
hs.put(new Mykey("alber",33),new Integer(2));
hs.put(new Mykey("bush",24),new Integer(3));然后想通过语句
Mykey m1=new Mykey("alber",33);
System.out.println((Integer)hs.get(m1));
取回name是alber年龄是33的键所对应的值,也就是2。现在的情况是得不到预期的值,而是得到了NULL。
现在的问题是,是不是不能这样写来取值,如果不能这样写要怎样写?为什么那样写?
即return name.hashCode()+age;不同你若这样先定义一个String= "alber";
你构造Mykey是传入这个参数,即可得到相同的字
* Created on 2004-7-3
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package e20040702;import java.util.*;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Hashtest
{
public static void main(String args[])
{
String name=new String("alber");
Hashtable hs=new Hashtable();
hs.put(new Mykey("joe",12),new Integer(1));
hs.put(new Mykey(name,33),new Integer(2));
hs.put(new Mykey("bush",24),new Integer(3));
Enumeration e=hs.keys();
while (e.hasMoreElements())
{
Mykey m=(Mykey)e.nextElement();
System.out.print(m.toString()+"=");
System.out.println((Integer)hs.get(m));
}
Mykey m1=new Mykey(name,33);
System.out.println((Integer)hs.get(m1));
}
}class Mykey
{
private String name;
private int age;
public Mykey(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString()
{
return new String(name+", "+age);
}
public boolean equals(Object obj)
{
if(!(obj instanceof Mykey))
return false;
else if(name.equals(((Mykey)obj).name) && age == ((Mykey)obj).age)
return true;
else
return false;
}
public int hashCode()
{
return name.hashCode()+age;
}
}
Mykey m1=new Mykey("alber",33);
这里所建的m1跟之前压入hashtable中的那一个键已经是不一样了。因为name是新的一对象了,因此String.hasCode也就跟原本的不一样了,这样的话就不能取得所要的值了,最后只能是null