Java面向对象_常用类库api——对象比较器

概念:对两个或多个数据项进行比较,以确定他们是否相等,或确定他们之间的大小关系及排列顺序成为比较。

1.Comparable接口:

此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。

 1 public class ComparableDemo {
 2
 3     /**
 4      * @param args
 5      */
 6     public static void main(String[] args) {
 7         // TODO Auto-generated method stub
 8         Cat[] cats={new Cat("tom",4),new Cat("jack",3),new Cat("xiaohua",5)};
 9         Arrays.sort(cats);
10         for (Cat cat : cats) {
11             System.out.println(cat);
12         }
13     }
14
15 }
 1 public class Cat implements Comparable<Cat> {
 2     private String name;
 3     private int age;
 4
 5     public Cat() {
 6         super();
 7         // TODO Auto-generated constructor stub
 8     }
 9     public Cat(String name, int age) {
10         super();
11         this.name = name;
12         this.age = age;
13     }
14     public String getName() {
15         return name;
16     }
17     public void setName(String name) {
18         this.name = name;
19     }
20     public int getAge() {
21         return age;
22     }
23     public void setAge(int age) {
24         this.age = age;
25     }
26     @Override
27     public String toString() {
28         return "Cat [name=" + name + ", age=" + age + "]";
29     }
30     //通过此方法实现对象比较
31     @Override
32     public int compareTo(Cat o) {
33         // TODO Auto-generated method stub
34         if(this.age <o.age ){//从小到大排序
35             return -1;
36         }else if(this.age >o.age ){
37             return 1;
38         }else{
39         return 0;
40     }
41     }
42
43 }

2.Comparator接口:(不改变类,再写一个比较类)

强行对某个对象collection进行整体排序的比较。

 1 public class ComparableDemo {
 2
 3     /**
 4      * @param args
 5      */
 6     public static void main(String[] args) {
 7         // TODO Auto-generated method stub
 8         Dog[] dogs={new Dog("tom",4),new Dog("jack",3),new Dog("xiaohua",5)};
 9         Arrays.sort(dogs, new DogComparator());
10         for (Dog dog : dogs) {
11             System.out.println(dog);
12         }
13     }
14
15 }
 1 public class Dog {
 2     private String name;
 3     private int age;
 4     public Dog() {
 5         super();
 6         // TODO Auto-generated constructor stub
 7     }
 8     public Dog(String name, int age) {
 9         super();
10         this.name = name;
11         this.age = age;
12     }
13     public String getName() {
14         return name;
15     }
16     public void setName(String name) {
17         this.name = name;
18     }
19     public int getAge() {
20         return age;
21     }
22     public void setAge(int age) {
23         this.age = age;
24     }
25     @Override
26     public String toString() {
27         return "Dog [name=" + name + ", age=" + age + "]";
28     }
29 }
 1 import java.util.Comparator;
 2
 3 public class DogComparator implements Comparator<Dog>{
 4
 5     @Override
 6     public int compare(Dog o1, Dog o2) {
 7         // TODO Auto-generated method stub
 8         if(o1.getAge()<o2.getAge()){
 9             return -1;
10         }else if(o1.getAge()>o2.getAge()){
11             return 1;
12         }else{
13         return 0;
14     }
15     }
16
17 }
时间: 2024-10-21 09:54:07

Java面向对象_常用类库api——对象比较器的相关文章

Java面向对象_常用类库api——日期操作类

Data类 类Data表示特定的瞬间,精确到毫秒,也就是程序运行时的当前时间 Data data=new Data();//实例化Data对象,表示当前时间 Calendar类 日历类,使用此类可以将时间精确到毫秒显示. //两种实例化方式 Calendar c=Calendar.getInstance();//Calendar类是抽象类,不能直接new Calendar c=new GregorianCalendar(); DateFormat类及子类SimpleDateFormat 例: 1

Java面向对象_常用类库api——二叉树数据结构实现

二叉树是每个节点最多有两个子树的有序树.通常子树被称为"左子树"和"右子树". 二叉树算法的排序规则: 1.选择第一个元素作为根节点 2.之后如果元素大于根节点放在右子树,如果元素小于根节点,则放在左子树 3.最后按照中序遍历的方式进行输出,则可以得到排序的结果(左->根->右) 8.3.10.1.6.14.4.7.13 1 public class BinaryTree { 2 private Node root; 3 public void addN

Java面向对象_常用类库api

StringBuffer 例: 1 public class StringBufferDemo { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 //使用String的写法连接字符串,比较占内存 9 String s="hello"; 10 String ss=s+"world"; 11 fo

java面向对象编程(1)-类与对象

1.问题的提出      张老太养了两只猫猫:一只名字叫小白,今年3岁,白色.还有一只叫小花,今年100岁,花色.请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色.如果用户输入的小猫名错误,则显示张老太没有这只猫. //用前面学习过的知识写出代码如下: public class Demo107{ public static void main(String []args){ int a=49;//输入的名字49,50 int cat1age=3; //第一只猫 String

Java面向对象_对象内存分析—值传递和引用传递

对象内存分析,我一直学的比较模糊,今天抽空整理一下,希望能理清. 先说一下,内存分析从何而来,这对于我们这些刚接触java的人来说都比较模糊,就从new关键字说起吧. new关键字表示创建一个对象或者说是实例化对象或者说是申请内存空间,所有程序运行都需要内存来存储数据,这样内存的概念就出来了.举个例子说明:定义一个类Person,属性:char a;int sge;那么创建一个对象申请的内存空间就是所有属性所占字节之和,为6个字节. 详细理一下对象在内存中的结构: Person p=new Pe

Java面向对象_对象数组

今天学习了对象数组,写点东西总结一下.废话不多说,啥是对象数组呢? 对象数组的概念是这么讲的,对象数组就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋给数组. 举个例子,使用对象数组实现多个Hero的管理 1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class Test4 { 5 6 /** 7 * @param args 8 */ 9 public static void main(St

中国MOOC_面向对象程序设计——Java语言_第2周 对象交互_1有秒计时的数字时钟

第2周编程题 查看帮助 返回 第2周编程题,在课程所给的时钟程序的基础上修改 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 1 有秒计时的数字时钟(10分) 题目内容: 这一周的编程题是需要你在课程所给的时钟程序的基础上修改而成.但是我们并不直接给你时钟程序的代码,请根据视频自己输入时钟程序的Display和Clock类的代码,

中国MOOC_面向对象程序设计——Java语言_第3周 对象容器_1查找里程

第3周编程题 查看帮助 返回 第3周编程题.注意程序(包括注释)中不能出现汉字. 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 1 查找里程(10分) 题目内容: 题目内容: 下图为国内主要城市之间的公路里程: 你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程. 注意:任何两个城市之间的里程都

Java 常用类库 之 对象的克隆 Cloneable

http://www.verejava.com/?id=16993097143799 /** 知识点: 对象的克隆 Cloneable */ public class TestClone { public static void main(String[] args) throws Exception { //实例化一只 喜洋洋 Sheep sheep=new Sheep("喜洋洋","白色"); //灰太狼 想克隆两只 喜洋洋 就可以大吃一顿 Sheep s1=(