欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(比较器)比较器问题引出

程序员文章站 2024-01-20 17:26:10
...

比较器问题引出

所谓的比较器就是进行大小关系确定判断,下面先分析一下比较器存在的意义:

如果要进行数组操作,肯定使用java.util.Arrays的操作类完成,这个类里面提供有绝大部分的数组操作支持,同时在这个类里面还提供有一种对象数组的排序支持:public static void sort(Object[] a);

范例:实现对象数组的排序

package 开发支持类库;

import java.util.Arrays;

public class 比较器问题的引出 {
	public static void main(String[] args) {
		Integer[] data = new Integer[] {10,8,9,4,3};	//对象数组
		Arrays.sort(data);	//进行对象数组的排序
		System.out.println(Arrays.toString(data));	//输出
	}
}

[3, 4, 8, 9, 10]

如果现在给定的是一个String 型的对象数组,也是可以进行排序处理的。

范例:String对象数组排序

package 开发支持类库;

import java.util.Arrays;

public class 比较器问题的引出 {
	public static void main(String[] args) {
		String[] data = new String[] {"X","x","中","Y","y"};	//对象数组
		Arrays.sort(data);	//进行对象数组的排序
		System.out.println(Arrays.toString(data));	//输出
	}
}

[X, Y, x, y, 中]

Java.lang.Integer与java.lang.String两个类都是由系统提供的程序类,如果现在有一个自定义的类需要进行排序处理。

范例:采用自定义类型进行排序

 

package 开发支持类库;

import java.util.Arrays;

public class 比较器问题的引出 {
	public static void main(String[] args) {
		Person[] data = new Person[] {
				new Person("王五",19),
				new Person("张三",80),
				new Person("李四",41),
				new Person("周一",50)
			};
		Arrays.sort(data);	//进行对象数组的排序
		System.out.println(Arrays.toString(data));	//输出
	}
}

class Person{
	private String name;
	private int age;
	
	public Person(String name,int age) {
		this.name = name;
		this.age = age;
	}
	
	//setter、getter略
	public String toString() {
		return "【Person类对象】姓名:"+this.name +"、年龄:"+this.age;
	}
}

Exception in thread "main" java.lang.ClassCastException: class 开发支持类库.Person cannot be cast to class java.lang.Comparable

任意的一个类默认情况下是无法使用系统内部的类进行数组排序或比较的,  是因为没有明确的指定出到底该如何进行比较的定义(没有比较规则),那么这个时候在Java里面为了统一规则的定义,所以提供有比较器的接口:Comparable接口。