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()方法来进行比较
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
Employee 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(){
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
Employee 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(){
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
Employee 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 stub
Employee 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));
}
}
18.Comparable,Comparator比较对象大小
最新推荐文章于 2022-07-31 18:04:46 发布