第1页共78页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共78页第十三章2007年6月17日星期日授课教师:学生:第一节HashMap类常见的方法及其用法publicclassTest{publicstaticvoidmain(String[]args){//创建5个Bean的对象b1-b5并对它们进行初始化Beanb1=newBean();b1.setAge(23);b1.setName("Bob");Beanb2=newBean();b2.setAge(23);b2.setName("Bob");Beanb3=newBean();Beanb4=newBean();第2页共78页第1页共78页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共78页b4.setAge(30);b4.setName("Jack");Beanb5=newBean();b5.setAge(29);b5.setName("wang");HashMaph=newHashMap();//创建HashMap类型对象h;//并调用put方法,将它们取个key名(外号),加入到Map中h.put("1",b1);h.put("2",b2);h.put("3",b3);h.put("4",b4);h.put("5",b5);h.remove("3");//调用remove()方法,将key值为"3"的元素移除HashMapSystem.out.println(h.size());//输出Map中的元素数Beantemp=(Bean)h.get("5");//将key值为"5"的元素取出来,并恢复其Bean身份,并其引用返回给tempSystem.out.println(temp.getAge());System.out.println(temp.getName());//输出key值为"5"的属性值}}第二节equals方法和hashCode方法的重写在处理两个对象之间关系时,有时会需要判断两个对象是否相等,如果他们的引用指向的是同一个对象,那么它们是相等的。如Object中的equals方法。如果它们指向的是同一类型的不同对象,但是他们的属性值是相等的,也就是说它们的内容是相等的,那么我们就需要重写equals方法,例如:String中的equals方法就是Object中的equals方法的重写。如果我们自己定义一个类,需要将自己写的类型的两个对象equals。那么我们就需要在该类中重写Object中的equals方法。重写完equals方法后还需要重写hashCode方法。因为当我们用Hash容器(如HashMap、HashSet)装载这些对象时,例如,将一个对象用add方法加入Set时,会产生一个HashCode,当我们又创建一个同类型内容相同的对象时,又变成另外一个HashCode了,它们在容器中的HashCode是随机的生成的,那么你就无法取得该对象了。如果我们要判断容器中是否装进了某种类型的对象,那么就需要重写hashCode方法,因为equals方法返回true的对象,它们的hashCode是相同的,重写hashCode方法就是让计算机在同一HashCode中寻找,否则计算机出于Hash容器的高效性考虑,不会去在已经存放该对象的hashCode中寻找,当然也就找不到了。第3页共78页第2页共78页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第3页共78页重写equals方法和hashCodepublicclassMoney{//创建名叫Money这个类publicintvalue=0;//定义int型数据成员value,并初始化为0。publicMoney(){//创建无参数的构造方法}publicMoney(inti){//带有参数的构造方法value=i;}publicbooleanequals(Objectobj){//重写时需要注意重写的方法定义的要求if(obj==null){//判断形参的是否为空。如果是,返回falsereturnfalse;}if(this==obj){//判断形参对象与调用该方法的当前对象是否指向同一对象,如果是返回true.returntrue;}if(!(objinstanceofMoney)){//判断形参对象是否是Money的实例,如果不是,返回false.returnfalse;}Moneymo=(Money)obj;//将形参引用恢复成该对象的身份。if(mo.value!=this.value){//如果他们的内容不相等,返回falsereturnfalse;}returnture;如果都不是上面的情况返回true}publicinthashcode(){//重写hashcode方法,使它们的hashcode保持一致returnvalue;}第4页共78页第3页共78页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第4页共78页我们在eclipse中测试一下:如果我们不重写hashCode方法。那么输出的将会是flase如果我们将每个对象都存放在同一hashCode中,那样查找的效率就会很低,但是我们还可以利用String中的hashCode的算法,去重新写hashCode方法。publicinthashCode(){Stringstr=String.valueOf(value);//将整型的value转化为String型的strreturnstr.hashCode();//用String中的hashCode的算法,返回h...