A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© itheima_llt 高级黑马   /  2015-4-15 16:41  /  596 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 itheima_llt 于 2015-4-15 17:43 编辑

只根据年龄判断去重,这个太不符合实际了,
把需求改一下:
往TreeSet集合中存储自定义对象学生。
想先按照学生的年龄进行排序,
如果年龄相同则判断姓名,根据字符串排序。
那么只需要在年龄相等的时候在判断一次就可以解决问题了!
游客,如果您要查看本帖隐藏内容请回复


运行结果为:


Jone----15
Jordan----16
Jack----20
Jimmy----20
Jane----21
Tom----26
现在符合实际情况了,年龄相同但姓名不同的人已经成功存入了!
而且在年龄相等的情况下,对年龄也进行了自然排序。

现在先做个小结:
在TreeSet集合中去除重复元素的时候,
当主要条件相同时,一定要对次要条件进行判断。
例如,在本例中,主要条件为年龄,次要条件为姓名。

当且仅当主要条件和次要条件均相同的时候,不存入。
例如,在本例中姓名和年龄均相同的时候,不存入。

TreeSet集合的底层数据结构是什么呢?
答案是:二叉树。
那么如果我们想要保持存取顺序一致该怎么做呢??
很简单,只需要在覆盖compareTo方法的时候,令返回值为固定值1,即:
return 1;
这是什么意思呢?
这是表示this对象比obj对象大,对应的二叉树结构就会是这样的:


运行结果:
Jack----20
Jane----21
Jane----21
Jimmy----20
Jone----15
Jone----15
Tom----26
Jordan----16

如果是倒序取出呢?
很简单,只需要在覆盖compareTo方法的时候,令返回值为固定值-1,即:
return -1;
这是表示this对象比obj对象小,对应的二叉树结构就会是这样的:


运行结果:


Jordan----16
Tom----26
Jone----15
Jone----15
Jimmy----20
Jane----21
Jane----21
Jack----20

当return 0;时表示只所有元素都相等,那么就只能存入一个元素了,自然也只能取出一个元素。
运行结果:


Jack----20

所以,再汇总一下所学知识:
TreeSet保证元素唯一性的依据是:
compareTo方法return 0;

TreeSet第一种排序方式:
让元素自身具备可比性,
元素需要实现Comparable接口,覆盖compareTo方法,这种方式叫自然排序!


1 个回复

倒序浏览
回复                  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马