java 集合 HashMap 重写hashCode() equals()方法来存放自定义类对象

时间:2023-01-01 19:17:01
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;

public class HashMapTest
{
public static void main(String[] args)
{
HashMap<IdNumber, String> hs2=new HashMap<IdNumber,String>();
hs2.put(new IdNumber(2000), "小明");
hs2.put(new IdNumber(2001), "小花");
hs2.put(new IdNumber(2002), "小莉");
System.out.println("hs2="+hs2);
//key [2000]已经存在, key[2000] 的 value域由"王五"替换“小明”
String farmerValue=hs2.put(new IdNumber(2000),"王五");
System.out.println("farmerValue="+farmerValue);
System.out.println("hs2="+hs2);
//遍历输出:
//生成封装了 key-value的Set集合
Set<Entry<IdNumber, String>> entryhs2=hs2.entrySet();
Iterator<Entry<IdNumber, String>> entryit=entryhs2.iterator();
while(entryit.hasNext())
{
Entry<IdNumber, String> entryElement=entryit.next();
IdNumber key=entryElement.getKey();
String value=entryElement.getValue();
System.out.println("key="+key+" value="+value);
}


}
}
class IdNumber
{
private int IdNumber;
public IdNumber() {
// TODO Auto-generated constructor stub
}
public IdNumber(int IdNumber)
{
this.IdNumber=IdNumber;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "["+this.IdNumber+"]";
}
@Override
public boolean equals(Object obj)
{
if(obj==this)//自己和自己比较
return true;//那就是同一个相等了
//传入的引用不为空,而且两个的类型一样
if(obj!=null&&obj.getClass()==this.getClass())
{
IdNumber idNumber2=(IdNumber) obj;//类型转换
return this.IdNumber==idNumber2.IdNumber;
//如果两个的编号一样,那就认为相等
}
return false;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return this.IdNumber*100;
}
}

//结果如下:

java 集合 HashMap 重写hashCode() equals()方法来存放自定义类对象