黑马程序员_日记44_TreeSet第一种排序方式小结
2015-04-15 16:44
253 查看
——- android培训、java培训、期待与您交流! ———-
/*
只根据年龄判断去重,这个太不符合实际了,
把需求改一下:
往TreeSet集合中存储自定义对象学生。
想先按照学生的年龄进行排序,
如果年龄相同则判断姓名,根据字符串排序。
那么只需要在年龄相等的时候在判断一次就可以解决问题了!
![](https://img-blog.csdn.net/20150415164258786)
运行结果为:
Jone—-15
Jordan—-16
Jack—-20
Jimmy—-20
Jane—-21
Tom—-26
现在符合实际情况了,年龄相同但姓名不同的人已经成功存入了!
而且在年龄相等的情况下,对年龄也进行了自然排序。
现在先做个小结:
在TreeSet集合中去除重复元素的时候,
当主要条件相同时,一定要对次要条件进行判断。
例如,在本例中,主要条件为年龄,次要条件为姓名。
当且仅当主要条件和次要条件均相同的时候,不存入。
例如,在本例中姓名和年龄均相同的时候,不存入。
TreeSet集合的底层数据结构是什么呢?
答案是:二叉树。
那么如果我们想要保持存取顺序一致该怎么做呢??
很简单,只需要在覆盖compareTo方法的时候,令返回值为固定值1,即:
return 1;
这是什么意思呢?
这是表示this对象比obj对象大,对应的二叉树结构就会是这样的:
![](https://img-blog.csdn.net/20150415164230332)
运行结果:
Jack—-20
Jane—-21
Jane—-21
Jimmy—-20
Jone—-15
Jone—-15
Tom—-26
Jordan—-16
![](https://img-blog.csdn.net/20150415164221518)
如果是倒序取出呢?
很简单,只需要在覆盖compareTo方法的时候,令返回值为固定值-1,即:
return -1;
这是表示this对象比obj对象小,对应的二叉树结构就会是这样的:
![](https://img-blog.csdn.net/20150415164207634)
运行结果:
Jordan—-16
Tom—-26
Jone—-15
Jone—-15
Jimmy—-20
Jane—-21
Jane—-21
Jack—-20
![](https://img-blog.csdn.net/20150415164157556)
当return 0;时表示只所有元素都相等,那么就只能存入一个元素了,自然也只能取出一个元素。
运行结果:
Jack—-20
![](https://img-blog.csdn.net/20150415164052663)
所以,再汇总一下所学知识:
TreeSet保证元素唯一性的依据是:
compareTo方法return 0;
TreeSet第一种排序方式:
让元素自身具备可比性,
元素需要实现Comparable接口,覆盖compareTo方法,这种方式叫自然排序!
/*
只根据年龄判断去重,这个太不符合实际了,
把需求改一下:
往TreeSet集合中存储自定义对象学生。
想先按照学生的年龄进行排序,
如果年龄相同则判断姓名,根据字符串排序。
那么只需要在年龄相等的时候在判断一次就可以解决问题了!
import java.util.*; //学生类实现Comparable接口,并覆盖comparTo()方法---让Student自身具备可比性 class Student implements Comparable { private String name;//学生姓名 private int age;//学生年龄 //构造函数传递参数 Student(String name,int age) { this.name = name; this.age = age; } public int compareTo(Object obj) { //强制类型转换为Student Student s = (Student)obj; //return 0; //利用Integer中的compareTo方法进行比较学生年龄 int num = new Integer(this.getAge()).compareTo(new Integer(s.getAge())); //当年龄相等的时候对姓名进行判断 if(num == 0) return this.getName().compareTo(s.getName()); //返回两对象年龄比较结果 return num; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } } //主类 class TreeSetDemo { public static void main(String[] args) { //1 创建TreeSet集合 TreeSet ts = new TreeSet(); //2 添加学生对象 ts.add(new Student("Jack",20)); ts.add(new Student("Jane",21)); ts.add(new Student("Jane",21)); ts.add(new Student("Jimmy",20)); ts.add(new Student("Jone",15)); ts.add(new Student("Jone",15)); ts.add(new Student("Tom",26)); ts.add(new Student("Jordan",16)); //迭代取出 for(Iterator it = ts.iterator(); it.hasNext(); ) { //强制转换为Student对象 Student stu = (Student)it.next(); System.out.println(stu.getName()+"----"+stu.getAge()); } } }
运行结果为:
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方法,这种方式叫自然排序!
相关文章推荐
- 黑马程序员,TreeSet的二种排序方式
- 黑马程序员———TreeSet两种排序方式
- 黑马程序员_日记55_TreeSet、泛型限定和比较器限定方式的综合运用方式
- 黑马程序员_009_TreeSet的两种排序方式和HashSet保持元素唯一性的方式
- 黑马程序员——学习日记之--Java网络编程小结
- Map两种遍历方式与TreeSet两种排序依据
- 黑马程序员——java学习9(毕15-16)——TreeSet、Map、泛型、字符排序
- TreeSet集合两个排序方法方法的分析&&Map集合获取的两中方式
- TreeSet的两种排序方式
- 黑马程序员——java-IO流中复制单击目录以及使用递归的方式复制多级目录小结
- 黑马程序员 TreeSet排序的两种实现方式
- TreeSet的第二种排序方式
- TreeSet的两种排序方式
- 黑马程序员_学习日记44_611基础加强(扩展方法、XML、深拷贝浅拷贝、特性)
- TreeSet的两种排序方式
- java的几种排序方式小结
- TreeSet的第二种排序方式:比较器
- TreeSet集合排序两种实现方式Comparable和Comparator比较
- 黑马程序员--07.集合框架--08.【TreeSet的Comparator排序】【TreeSet总结】
- 黑马程序员_学习日记83_812图书商城项目小结