package
helloWorld;
import java.util.Hashtable;
public class Key ... {
private String name;
private int age;
public Key(String name, int age) ...{
this.name = name;
this.age = age;
}
public int getAge() ...{
return age;
}
public void setAge(int age) ...{
this.age = age;
}
public String getName() ...{
return name;
}
public void setName(String name) ...{
this.name = name;
}
/** *//**
* Key key1=new Key("key1",1);
* Key key2=new Key("key2",2);
* Key key3=new Key("key1",1);
* Key key4=key1;
*
* 对象间的比较分两种:
* 一种是通过比较内存地址是否一致比较是否是同一对象,用==来表示。
* 如key1和key3内容虽然相同, 但key3是新new的,和key1地址不一样。以上只有key1==key3.
*
* 另一种是按编程人员的眼光看两个对象是否一致,用equals方法来表示,
* 具体怎么一样是一个属性一样就可以还是需要所有属性都一样这两个对象才equals由
* 开发人员自己实现这个方法来决定。
*/
public boolean equals(Object obj) ...{
if (obj instanceof Key)
...{
Key key=(Key)obj;
if (name.equals(key.getName())&&age==key.getAge())
return true;
else return false;
}
else return false;
}
/** *//**
* 当此类的对象做为HashTable的key时,当两个对象既equals且hashCode相同的情况下视为同一个key。
*
* Hashtable ht=new Hashtable();
* ht.put(new Key("Tom",20),"I'm Tom");
* ht.put(new Key("Tom",20),"I'm Mike");
* ht.put(new Key("Andy",20),"I'm Andy");
*
* ht.get(new Key("Tom",20)结果为 I'm Mike
*
* JAVA规定两个equals的对象其haseCode也要一样,所以一般情况下这两个方法是同时覆盖的。
*
* 一般几个属性在equals中比较,就用这几个属性的hashCode XOR 即^
*/
public int hashCode() ...{
return name.hashCode()^new Integer(age).hashCode();
}
/** *//**
* 以对象做为参数打印时显示的文本
* System.out.println(new Key("Andy",20));
* 如果没覆盖此方法,输出为 helloWorld.Key@1f35b6
* 如此覆盖后,输出为 Andy,20
*/
public String toString() ...{
return name+","+age;
}
}
import java.util.Hashtable;
public class Key ... {
private String name;
private int age;
public Key(String name, int age) ...{
this.name = name;
this.age = age;
}
public int getAge() ...{
return age;
}
public void setAge(int age) ...{
this.age = age;
}
public String getName() ...{
return name;
}
public void setName(String name) ...{
this.name = name;
}
/** *//**
* Key key1=new Key("key1",1);
* Key key2=new Key("key2",2);
* Key key3=new Key("key1",1);
* Key key4=key1;
*
* 对象间的比较分两种:
* 一种是通过比较内存地址是否一致比较是否是同一对象,用==来表示。
* 如key1和key3内容虽然相同, 但key3是新new的,和key1地址不一样。以上只有key1==key3.
*
* 另一种是按编程人员的眼光看两个对象是否一致,用equals方法来表示,
* 具体怎么一样是一个属性一样就可以还是需要所有属性都一样这两个对象才equals由
* 开发人员自己实现这个方法来决定。
*/
public boolean equals(Object obj) ...{
if (obj instanceof Key)
...{
Key key=(Key)obj;
if (name.equals(key.getName())&&age==key.getAge())
return true;
else return false;
}
else return false;
}
/** *//**
* 当此类的对象做为HashTable的key时,当两个对象既equals且hashCode相同的情况下视为同一个key。
*
* Hashtable ht=new Hashtable();
* ht.put(new Key("Tom",20),"I'm Tom");
* ht.put(new Key("Tom",20),"I'm Mike");
* ht.put(new Key("Andy",20),"I'm Andy");
*
* ht.get(new Key("Tom",20)结果为 I'm Mike
*
* JAVA规定两个equals的对象其haseCode也要一样,所以一般情况下这两个方法是同时覆盖的。
*
* 一般几个属性在equals中比较,就用这几个属性的hashCode XOR 即^
*/
public int hashCode() ...{
return name.hashCode()^new Integer(age).hashCode();
}
/** *//**
* 以对象做为参数打印时显示的文本
* System.out.println(new Key("Andy",20));
* 如果没覆盖此方法,输出为 helloWorld.Key@1f35b6
* 如此覆盖后,输出为 Andy,20
*/
public String toString() ...{
return name+","+age;
}
}