为了账号安全,请及时绑定邮箱和手机立即绑定

Tree Set 对象中如何剔除相同的元素?请问是为什么求指导!

Tree Set 对象中如何剔除相同的元素?请问是为什么求指导!

MMTTMM 2019-06-13 10:19:11
题目描述题目来源及自己的思路我的程序里声明了一个TreeSet对象ts,写了一个学生类,当学生的年龄和姓名相同时被认为是相同元素。在ts中添加了第一个学生对象与最后一个学生对象时,使这俩个学生对象的姓名和年龄相同,打印结果发现这俩个元素均被输出,ts大小为4。相关代码importjava.util.TreeSet;publicclassTreeSetDemo{publicstaticvoidmain(String[]args){TreeSetts=newTreeSet<>();ts.add(newStudent("lisi02",22));ts.add(newStudent("lisi01",40));ts.add(newStudent("lisi08",19));ts.add(newStudent("lisi02",22));//thefirstelementandthelastoneareaddedtots//However,tsbelongstoaSetCollection.//SoIthinkthelastoneshouldnotbeaddedtots.//whenthesecondelementisannotated,thelastonecannotbeadded.//Canyouexplainwhy?for(Studente:ts){System.out.println(e.getName()+"\t...\t"+e.getAge());}System.out.println(ts.size());}}classStudentimplementsComparable{privateStringname;privateintage;Student(Stringname,intage){this.name=name;this.age=age;}publicStringgetName(){returnname;}publicintgetAge(){returnage;}publicintcompareTo(Objectobj){if(!(objinstanceofStudent))thrownewRuntimeException("NotStudentclass");Studentp=(Student)obj;//Whennameandagearethesame,theelementsarethesameif(this.name.equals(p.getName())&&p.getAge()==this.age){System.out.println(name+"..."+age);return0;}elsereturn1;}}你期待的结果是什么?实际看到的错误信息又是什么?
查看完整描述

2 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

你的compareTo方法返回0或1,返回0的时候新value替换旧value,返回1的时候,则作为子节点添加到红黑树的右边。
ts.add(newStudent("lisi02",22));
ts.add(newStudent("lisi01",40));
ts.add(newStudent("lisi08",19));
ts.add(newStudent("lisi02",22));
如果代码是这样的,当你添加完第三个元素lisi0819的时候,红黑树会进行旋转操作,旋转完root节点是lisi0140,左子节点为lisi0222,右子节点为lisi0819,当你添加第四个元素时候,只会和lisi0140和lisi0819进行比较,因为你的compareTo方法不存在-1的返回值。所以ts中会保存第四个元素。
ts.add(newStudent("lisi02",22));
//ts.add(newStudent("lisi01",40));
ts.add(newStudent("lisi08",19));
ts.add(newStudent("lisi02",22));
当你把第二个元素注释掉,添加完lisi0222和lisi0819之后,红黑树不需要旋转,root节点是lisi0222,右子节点为lisi0819,当你添加最后一个lisi0222的时候是会和第一个lisi0222进行比较的。所以ts中只会有两个元素。
                            
查看完整回答
反对 回复 2019-06-13
  • 2 回答
  • 0 关注
  • 546 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信