JAVA学习笔记(二十三)-Comparable接口和Comparator接口
Comparable接口排序
/*
* 学生类,实现Comparable接口,使其具有比较性
*/
public class Student implements Comparable
{
private String name;// 姓名
private int age;// 年龄
private int score;// 成绩
public Student()
{
super();
}
public Student(String name, int age, int score)
{
super();
this.name = name;
this.age = age;
this.score = score;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public int getScore()
{
return score;
}
public void setScore(int score)
{
this.score = score;
}
@Override
public String toString()
{
return "Student[name=" + name + ",age=" + age + ",score=" + score + "]";
}
//实现compareTo方法,定义比较规则
@Override
public int compareTo(Object o)
{
Student stu = (Student) o;
if(this.age>stu.getAge()){
return 250;
}else if(this.age<stu.getAge()){
return -13;
}else{
return 0;
}
}
}
Comparator接口排序
/*
* 创建一个类,实现Comparator接口
* 学生比较器,即实现对学生进行比较排序
*/
public class StudentComparator implements Comparator
{
/*
* 实现compare方法,比较用来排序的两个参数
* 根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
*/
@Override
public int compare(Object o1, Object o2)
{
Student stu1 = (Student) o1;
Student stu2 = (Student) o2;
//根据学生的成绩进行比较
/*int result=stu2.getScore()-stu1.getScore();
return result;*/
if(stu1.getScore()>stu2.getScore()){
return 250;
}else if(stu1.getScore()<stu2.getScore()){
return -13;
}else{
return 0;
}
}
}
自定义比较器
import java.util.TreeSet;
/*
* 测试类
* TreeSet集合用于对集合中的元素进行排序
*
* * 排序的两种方式:
* 1.自定义比较器
* 定义一个类,实现Comparator接口,实现compare方法,
* 将该类的实例作为TreeSet构造方法的参数,此时TreeSet集合就具有了比较性
* 2.让元素本身具有比较性
* 只要让元素实现Comparable接口,实现compareTo方法即可
*/
public class Test
{
public static void main(String[] args)
{
test2();
}
// 方式一:自定义比较器
public static void test1()
{
// 定义一个学生比较器
StudentComparator sc = new StudentComparator();
// 定义一个TreeSet集合,保存学生信息
TreeSet ts = new TreeSet(sc);
// 创建三个学生对象
Student stu1 = new Student("唐伯虎", 20, 78);
Student stu2 = new Student("秋香", 18, 93);
Student stu3 = new Student("石榴姐", 23, 58);
// 将学生对象添加到集合中
ts.add(stu1);
ts.add(stu2);
ts.add(stu3);
// 循环输出集合中的元素
for (Object obj : ts)
{
// System.out.println(obj);
System.out.println(obj.toString());
}
}
// 方式二:使元素本身具有比较性
public static void test2()
{
TreeSet ts = new TreeSet();
Student stu1 = new Student("唐伯虎", 20, 78);
Student stu2 = new Student("秋香", 18, 93);
Student stu3 = new Student("石榴姐", 23, 84);
ts.add(stu1);
ts.add(stu2);
ts.add(stu3);
for (Object obj : ts)
{
System.out.println(obj);
}
}
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。