为什么我new了3个Teacher对象,也覆盖了hashcode跟equals方法,而TreeSet中只有一个对象

问题描述

publicclassTeacherimplementsComparable<Teacher>{privateStringname;privateintage;privatedoublesalary;privateDatebirth;publicTeacher(Stringname,intage,doublesalary,Datebirth){super();this.name=name;this.age=age;this.salary=salary;this.birth=birth;}@OverridepublicStringtoString(){SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");return"Teacher[name="+name+",age="+age+",salary="+salary+",birth="+sdf.format(birth)+"]";}@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+age;result=prime*result+((name==null)?0:name.hashCode());returnresult;}@Overridepublicbooleanequals(Objectobj){if(this==obj)returntrue;if(obj==null)returnfalse;if(getClass()!=obj.getClass())returnfalse;Teacherother=(Teacher)obj;if(age!=other.age)returnfalse;if(name==null){if(other.name!=null)returnfalse;}elseif(!name.equals(other.name))returnfalse;returntrue;}publicstaticvoidmain(String[]args)throwsParseException{//TODOAuto-generatedmethodstubTreeSet<Teacher>ts=newTreeSet<Teacher>();SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");Teachert1=newTeacher("lsy",29,5000,sdf.parse("1993-09-11"));Teachert2=newTeacher("lqq",29,5000,sdf.parse("1993-09-23"));Teachert3=newTeacher("rsh",29,5000,sdf.parse("1993-06-06"));ts.add(t1);ts.add(t2);ts.add(t3);System.out.println(ts);}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicdoublegetSalary(){returnsalary;}publicvoidsetSalary(doublesalary){this.salary=salary;}publicTeacher(){super();}publicDategetBirth(){returnbirth;}publicvoidsetBirth(Datebirth){this.birth=birth;}@OverridepublicintcompareTo(Teachert){//TODOAuto-generatedmethodstubif(this.salary==t.salary){if(this.age==t.age){return0;}else{return(int)(this.age-t.age);}}else{return(int)(this.salary-t.salary);}}}

解决方案

解决方案二:
遍历一下看看
解决方案三:
遍历了还是一个对象,并且我输出tm.size()的值是1怎么回事
解决方案四:
关于javabean中hashCode()和equals方法的解析
解决方案五:
因为年龄和工资一样的话无法排序导致put不成功。建议你这样改下:@OverridepublicintcompareTo(Teachert){if(this.salary==t.salary){if(this.age==t.age){returnthis.name.compareToIgnoreCase(t.name);}else{return(int)(this.age-t.age);}}else{return(int)(this.salary-t.salary);}}

解决方案六:
还是没出先我想要的结果诶我是想让只要名字跟出生日期一样就让它是同一个对象按你的这样改完以后如果两个对象的名字跟出生日期一样而salary跟age其中有一个不一样它还会按两个对象处理啊怎么

时间: 2025-01-27 08:34:54

为什么我new了3个Teacher对象,也覆盖了hashcode跟equals方法,而TreeSet中只有一个对象的相关文章

对象-java中重写equals方法为什么不直接在里面比较hashcode()?

问题描述 java中重写equals方法为什么不直接在里面比较hashcode()? 看书上说只要重写在一个类中重写equals方法,那就一定要重写hashcode方法,因为两个对象只要equals返回值为true,那么他俩的hashcode就一定相同. 那为什么不可以提前先写好hashcode函数,然后在equals函数里面直接来一行if(this.hashcode() == otherObject.hashcode()) return true;else return false;就行了?

Java中判断对象是否相等的equals()方法使用教程_java

Object类中的equals方法用于检测一个对象是否等于另一个对象.在Object类中,这个方法判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的.从这点上看,将其作为默认操作也是合乎情理的.然而,对于多数类类说,这种判断并没有什么意义,例如,采用这种方式比较两个PrintStream是否相等就完全没有意义.然而,经常需要检测两个对象状态的相等性,如果两个对象的状态相等,就认为这两个对象是相等的.所以一般在自定义类中都要重写equals比较. 下面给出编写一个完美eq

马士兵J2SE-第三章-面向对象-Object类:toString方法、equals方法、对象转型、抽象类抽象方法、final关键字、接口

toString方法 public class test { public static void main(String[] args) { Teacher t=new Teacher(); System.out.println("1 "+t+" 2 "+t.toString()); } } class Teacher { public String toString() { return "I am a teacher"; } } 输出: 1

关于序列化:PHP 拥有序列化方法,可以返回对象的字符串表示。但序列化只保存对象的成员数据而不包话方法

对象|数据|字符串     PHP不支持永久对象,在OOP中永久对象是可以在多个应用的引用中保持状态和功能的对象,这意味着拥有将对象保存到一个文件或数据库中的能力,而且可以在以后装入对象.这就是所谓的序列化机制.PHP 拥有序列化方法,它可以通过对象进行调用,序列化方法可以返回对象的字符串表示.然而,序列化只保存了对象的成员数据而不包话方法. 在PHP4中,如果你将对象序列化到字符串$s中,然后释放对象,接着反序列化对象到$obj,你可以继续使用对象的方法!我不建议这样去做,因为(a)文档中没有

深入equals方法对象相等比较

equals方法的重要性毋须多言,只要你想比较的两个对象不愿是同一对象,你就应该实现equals方法,让对象用你认为相等的条件来进行比较.下面的内容只是API的规范,没有什么太高深的意义,但我之所以最先把它列在这儿,是因为这些规范在事实中并不是真正能保证得到实现. 1.对于任何引用类型, o.equals(o)==true 成立. 2.如果 o.equals(o1)==true 成立,那么o1.equals(o)==true也一定要成立. 3.如果 o.equals(o1)==true 成立且o

PHP数组与对象之间使用递归实现转换的方法

  本文实例讲述了PHP数组与对象之间使用递归实现转换的方法.分享给大家供大家参考.具体实现方法如下: 这里涉及一些简单的对象与数组的相互转换的问题,采用递归写了两个方法如下: ? 1 2 3 4 5 6 7 8function arrayToObject($e){ if( gettype($e)!='array' ) return; foreach($e as $k=>$v){ if( gettype($v)=='array' || getType($v)=='object' ) $e[$k]

php+html5使用FormData对象提交表单及上传图片的方法

 这篇文章主要介绍了php+html5使用FormData对象提交表单及上传图片的方法,实例分析了FormData对象的使用技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了php+html5使用FormData对象提交表单及上传图片的方法.分享给大家供大家参考.具体分析如下: FormData 对象,可以把form中所有表单元素的name与value组成一个queryString,提交到后台.在使用Ajax提交时,使用FormData对象可以减少拼接queryString的工

vba-我想在VBA中将一个任意对象复制到一块内存里,或存入数据库中,咋办?

问题描述 我想在VBA中将一个任意对象复制到一块内存里,或存入数据库中,咋办? 比如,我在EXCEL中,写了如下: private sub test() dim temp() as byte '如下一句是我想象的,我想将thisWorkBook.Sheet1对象复制到temp数组 Redim temp(对象长度) CopyMemory ptr(temp(0)), ptr(sheet1), 对象长度 '如此这般,我就可以将这个对象写入数据库中了 end sub 但应该怎么做呢,C++用久了我觉得这

jsp 网站开发-如何在JSP页面中,把数组中的TreeSet中的实体存储地址变成实体对象

问题描述 如何在JSP页面中,把数组中的TreeSet中的实体存储地址变成实体对象 首先,感谢大家抽时间看我这问题. 问题阐述: 我在做Spring Hibernate和struts整合的实验,之前,我在Action类中已经将要放在页面中的数据,传到JSP页面中,以下是Action类的代码: /** * 显示所有的商品分类 * * * @return */ public void showAllCategory() { try { List<CategoryDTO> resultList =