JAVA排序方法调用

排序语句的使用

初转java,很多操作都要重新学习java的版本。比如今天的主角:排序语句。

在程序设计过程中,排序算法是最常用到的算法之一,正是因为其经常用到,所以掌握利用已经设计好的算法语句,会大大提升程序设计过程中的效率。主要优点如下:

  1. 进行排序仅需要一句话,方便书写
  2. 设计好的算法,确保正确率
  3. 算法出自高手,保证运行效率

那么与C语言qsort和sort不同的是,JAVA语言中并不存在孤立的方法,所有的方法都在类中。所以,今天的主角sort函数,就出现在数组类Array中。

它的调用方式为:

Arrays.sort(Object[] o,int );

括号中,传递需要排序的数组,默认为升序排序。

那么这里就会产生几个问题

  1. 默认顺序为升序,想要降序该怎么办?
  2. 对象数组可以进行排序吗?

回答

在回答问题之前,我有必要引入两个十分相似的接口,comparable,comparator接口。
对象实现这两个接口,分别成为可比较对和比较器对象。

可比较对象

当一个类继承了Comparable接口并实现了CompareTo方法,那么该类实例化出的对象即为可比较对象。这个对象可与其它对象进行大小的比较。

比较器对象

当一个类继承了Comparator接口并实现了Compare方法,那么该类实例化出的对象即为比较器对象。这个对象可比较两个对象的大小。

贴一段代码举例:

class Person implements Comparable<Person>
{
	int age;
	Person(int age)
	{
		this.age = age;
	}
	public int compareTo(Person o) {
		return this.age - o.age;
	}
}

class Judge implements Comparator<Person>
{
	String name;
	Judge(String name)
	{
		this.name = name;
	}
	public int compare(Person o1, Person o2) {
		return o2.age - o1.age;
	}
	
}

在这一段代码中,Person类是可比较类,Judge类是比较器类

有了这样的铺垫,我就可以开始回答问题了。

问:默认顺序为升序,想要降序该怎么办?

答:想要获得降序排列,就必须为方法提供比较器,在比较器中重新定义比较规则。

默认排序算法中比较大小的方式是前者与后者运算使两者相减

为负则小
为零则等
为正则大

故可以重写比较器方法,让结果值取相反数,即可使数组降序。

相对应的,调用方法需改为:

Arrays.sort(数组,比较器对象);

比较方法写成:

public int compare(int a,int b)
{
	return b - a;
}

问:对象数组可以进行排序吗?

答:当然可以,有两种方法

  • 方法1:上一个问题中,我们提到了比较器对象在排序方法中的使用。对于对象数组,比较器的调用方式依旧适用。此时,我们的比较器的便需要可以比较对象大小。
    利用上文的两个类举例。比较器类Judge实现了比较方法,可以用来比较两个Person类对象。
    这时,我们实例化一个Person类对象数组person,再实例化一个Judge类对象judge便可使用语句进行排序了。写法:
Array.sort(person,judge);
  • 方法2:对象数组也可以像一般数组一样不通过比较器进行排序。不过这要求对象之间可进行大小比较。所以只需要我们让类实现Comparable接口,这样我们的对象就成了可比较对象,就可以参与排序了。

笔者水平有限,如有错误之处,欢迎指出

你可能感兴趣的:(JAVA,算法,java,算法)