18.Comparable,Comparator比较对象大小

来源:互联网 发布:发信息软件 编辑:程序博客网 时间:2024/06/04 23:31
package com.example.test2;import java.util.Arrays;import java.util.Comparator;import java.util.Random;/** *  * 比较对象大小 *  * 1.重写equals()方法来比较两个对象是否相等 * 2.实现Comaprable接口,重写compareTo()方法比较对象大小 * 3.通过定义Comparator比较器来比较两个对象之间大小 * */class Employee implements Comparable{private String name;private int age;private double salary;public Employee(String name, int age, double salary){this.name = name;this.age = age;this.salary = salary;}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 double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public String toString(){return String.format("%s %d %.1f\n", name, age, salary);}public boolean equals(Object obj){if (!(obj instanceof Employee)){return false;}Employee tmp = (Employee)obj;return name.equals(tmp.name) && age == tmp.age && salary == tmp.salary;}//实现Comparable接口重写compareTo()方法来进行比较@Overridepublic int compareTo(Object o) {// TODO Auto-generated method stubEmployee e = (Employee)o;return name.compareTo(e.name) > 0 ? 1 : (name.compareTo(e.name) == 0) ? 0 : -1;}}//自定义MyArrays使用冒泡排序模拟Arrays.sort()方法class MyArrays{public static void sort(Object[] arr){for (int i = 0; i < arr.length; i++){for (int j = 0; j < arr.length-1-i; j++){if (((Comparable)arr[j]).compareTo((Comparable)arr[j+1]) > 0){Object tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}}}public static void sort(Object[] arr, Comparator comparator){for (int i = 0; i < arr.length; i++){for (int j = 0; j < arr.length-1-i; j++){if (comparator.compare(arr[j], arr[j+1]) > 0){Object tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}}}}public class TestDemo {//通过匿名类来自定义比较器public static Comparator AGE_SORT = new Comparator(){@Overridepublic int compare(Object o1, Object o2) {// TODO Auto-generated method stubEmployee e1 = (Employee)o1;Employee e2 = (Employee)o2;return e1.getAge() > e2.getAge() ? 1 : (e1.getAge() == e2.getAge() ? 0 : -1);}};public static Comparator SALARY_SORT = new Comparator(){@Overridepublic int compare(Object o1, Object o2) {// TODO Auto-generated method stubEmployee e1 = (Employee)o1;Employee e2 = (Employee)o2;return e1.getSalary() > e2.getSalary() ? 1 : (e1.getSalary() == e2.getSalary() ? 0 : -1);}};public static void main(String[] args) {// TODO Auto-generated method stubEmployee e1 = new Employee("zhang", 20, 1111.1);Employee e2 = new Employee("zhang", 20, 1111.1);//等于号比较两个对象的地址if(e1 == e2){System.out.println("e1 == e2");}else{System.out.println("e1 != e2");}//Employee重写了该对象的equals方法,按照其成员变量进行一一比较if(e1.equals(e2)){System.out.println("e1.equals(e2)");}else{System.out.println("!e1.equals(e2)");}String[] nameArr = {"zhang", "li", "wang", "gao", "ma", "liu"};Employee[] employArr = new Employee[3];//随机产生三组Employee对象用来测试其比较大小的结果for (int i = 0; i < 3; i++){employArr[i] = new Employee(nameArr[new Random().nextInt(nameArr.length)],new Random().nextInt(30), Double.parseDouble(String.format("%.1f", Math.random()*10000)));}System.out.println(Arrays.toString(employArr));System.out.println("=====Arrays=====");Arrays.sort(employArr);System.out.println(Arrays.toString(employArr));Arrays.sort(employArr, AGE_SORT);System.out.println(Arrays.toString(employArr));Arrays.sort(employArr, SALARY_SORT);System.out.println(Arrays.toString(employArr));System.out.println("=====MyArrays=====");MyArrays.sort(employArr);System.out.println(Arrays.toString(employArr));MyArrays.sort(employArr, AGE_SORT);System.out.println(Arrays.toString(employArr));MyArrays.sort(employArr, SALARY_SORT);System.out.println(Arrays.toString(employArr));}}

1 0
原创粉丝点击