通过实现Comparable接口结合TreeSet来对对象自动排序
经过会遇到这样的情况,对于某个对象数组或者链表要按照一定的规则进行排序,那么我们该怎么做呢?
如遇到这样的需求:
1.需求1
对于学生对象按照年龄进行排序,年龄小的排在前面。
单单看到这样的需求,实现起来是比较简单的,自己写个函数实现一下快速排序或者比较土的冒泡排序,按照年龄来排序就可以了。我们再看看下面的需求
2.需求2
对于学生对象,按照年龄进行排序,年龄小的排在前面,年龄相同的,身高小的排在前面。
3.需求3
对于学生对象,按照年龄进行排序,年龄小的排在前面;年龄相同的,身高小的排在前面;身高相同时,体重轻的排在前面。
。。。
这样的需求,可能会随着页面的复杂化,越来越来复杂,如果要自己去做的话,估计得多层嵌套了,逻辑非常复杂,那是否有现成的比较简单的机制呢。
答案就是实现Comparable接口。
具体样例如下:
public class Student implements Comparable{
private int age;
public Student(int age)
{
this.age = age;
}
@Override
public int compareTo(Object obj) {
Student stu = (Student)obj;
if(this.age>stu.age)
return 1;
else if(this.age<stu.age)
return -1;
else
return 0;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
调用代码:
public static void main(String[] args) {
TreeSet<Student> treeSet = new TreeSet<Student>();
treeSet.add(new Student(1));
treeSet.add(new Student(3));
treeSet.add(new Student(2));
for(Student student:treeSet)
{
System.out.println(student.getAge());
}
}
输出结果:
1
2
3
可见自动按照年龄进行了排序,我们再修改一下代码,让学生按照年龄由大到排列:
public int compareTo(Object obj) {
Student stu = (Student)obj;
if(this.age>stu.age)
return -1;
else if(this.age<stu.age)
return 1;
else
return 0;
}
输出结果:
3
2
1
由此可见,这种通过对象实现Comparable接口,结合TreeSet的方式来进行对象排序,还是十分方便的,而且逻辑比较简单,后续如果有变更,直接修改compareTo方法即可。
通过实现Comparable接口结合TreeSet来对对象自动排序的更多相关文章
- 用TreeSet生成不重复自动排序随机数组
随机数组就是在指定长度的数组中用随机数字为每个元素赋值,常用于不确定数值的环境,如拼图游戏需要随机数组来打乱图片顺序.可是同时也存在问题,就是随机数的重复问题,这个问题常常被忽略. TreeSet类的 ...
- comparator接口与Comparable接口的区别
1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Pe ...
- Comparable接口与Comparator接口的区别
1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Pe ...
- comparator接口与Comparable接口的差别
1. Comparator 和 Comparable 同样的地方 他们都是java的一个接口, 而且是用来对自己定义的class比較大小的, 什么是自己定义class: 如 public class ...
- Comparable接口与Comparator接口的比较————总结
之前的两篇文章主要学习了Comparable接口和Comparator接口的学习.既然已经学习完了,现在就趁热打铁,进行总结吧! Comparable接口和Comparator接口的共同点: 1. 都 ...
- comparable接口 和 comparator接口的特点与区别
1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的. 什么是自定义class: 如 public class Pe ...
- 对象转型、迭代器Iterator、Set集合、装箱与拆箱、基本数据类型与字符串的转换、TreeSet集合与对象
包的声明与定义 需要注意的是,包的声明只能位于Java源文件的第一行. 在实际程序开发过程中,定义的类都是含有包名的: 如果没有显式地声明package语句,创建的类则处于默认包下: 在实际开发中 ...
- 8.13.2 TreeSet实现Comparable接口的两种方式
推荐使用第二种方式,编写比较器可以使数据类的程序耦合度降低,同时比较器也可以重复利用! 第一种方式:数据类实现Comparable接口,实现其中的compareTo方法 创建对象时,使用TreeSet ...
- TreeSet集合的自然排序与比较器排序、Comparable接口的compareTo()方法
[自然排序] package com.hxl; public class Student implements Comparable<Student> { private String n ...
随机推荐
- dp优化简单总结
1.二分优化 (使用二分查找优化查找效率) 典型例题:LIS dp[i]保存长度为 i 的上升子序列中最小的结尾,可以用二分查找优化到nlogn 2.数学优化 (通过数学结论减少状态数) 例题1:hd ...
- 传阿里整合资源,进军O2O市场
阿里巴巴对于本地生活市场,以及O2O领域始终虎视眈眈.从最早的融合口碑网,到最近阶段推出淘宝点点.收购高德地图等一系列app产品,其整合线上线下消费市场的野心已十分明显. 今年年初,阿里巴巴集团重新进 ...
- poj 2226 Muddy Fields(最小点覆盖+巧妙构图)
Description Rain has pummeled the cows' field, a rectangular grid of R rows and C columns (1 <= ...
- POJ 3468 A Simple Problem with Integers //线段树的成段更新
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 59046 ...
- Hacker(22)----解除系统中的密码
Win7系统中,用户可以设置BIOS密码以及系统登录密码,这些密码都有各自的用途.但对黑客而言,完全可以采用不同的方式绕过这些密码.下面介绍黑客如如何接触这些密码. 一.解除BIOS密码 BIOS密码 ...
- windows下netstat -aon命令
windows平台下netstat常用命令 C:\Users\Administrator>netstat --help 显示协议统计和当前 TCP/IP 网络连接. NETSTAT [-a] [ ...
- VB6.0连接MySQL数据库
VB6.0连接MySQL数据库
- Javascript基础form表单
<!DOCTYPE HTML> <html> <head> <script type="text/javascript" charset= ...
- String功能测试
package foxe; import java.io.IOException;import java.util.StringTokenizer; public class MainClass { ...
- Tomcat项目部署方式
一.静态部署 1.直接将web项目文件件拷贝到webapps 目录中 Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.所以可以将JS ...