17.3 如何对数据进行排列、整理
在很多应用程序中,一堆数据摆在眼前,需要知道哪些数据是最大的,哪些数据是最小的。在学生管理系统的成绩模块中,就必须要对所有成绩进行一个排序和整理,所以对数据的排列和整理,是程序设计中一个不可缺少的环节。
17.3.1 Arrays类的常用方法
在排序方面,Java语言提供了Arrays类来处理这个问题,Arrays类提供了数组整理、比较和检索功能。Arrays类中所有的方法都是静态方法,所以没有办法创建对象,它的常用方法如表17.2所示。
不知道读者有没有注意到,在搜索方法函数中,有一个二进制查找的概念。与二进制查找类似的查找方式,还有一种叫做顺序查找,这两者有什么区别吗?
❑顺序查找:在未经过整理的数组中,检索key值。
❑二进制查找:在整理过的数组中,检索key值。
说明 由于二进制查找仅用于经过整理后的数组中,所以速度要相对快点。
【实例17.7】下面将举一个实例来熟悉排序的用法。
01 import java.util.*;
02 public class file7
03 {
04 public static void main(String[]args)
05 {
06 int[]a=new int[]{2,34,21,11,23,56,65,33,89,90};
07 Arrays.sort(a);
08 for(int i=0;i<a.length;i++)
09 {
10 System.out.print(a[i]+"");
11 }
12 System.out.println("\n56的位置为:"+Arrays.binarySearch(a,56));
13 System.out.println("33的位置为:"+Arrays.binarySearch(a,33));
14 }
15 }
【代码说明】第6行定义了一个数组a,其包含10个没有顺序的数字,第7行使用排序方法sort()对a进行排序,第8~11行输出排序结果,第12~13行使用binarySearch()方法查找指定数字在数组中的位置。
注意 第7行直接使用Arrays.sort()方法,不需要创建新对象。
【运行效果】
2 11 21 23 33 34 56 65 89 90
56的位置为:6
33的位置为:4
说明 数组位置的索引是从0开始。
从上面的程序段可以观察到,一个数组如何进行排序和整理,以及搜索元素位置。
基本数据之间可以比较大小,那么对象之间如何比较大小呢?对象也可以分为可比较对象和不可比较对象,这就取决于其是否实现了Comparable接口,可比较对象实现了Comparable接口,而不可比较对象没有实现此接口。
要想实现这个接口,就应该实现Comparable接口中的compareTo()方法。如下所示:
public interface Comparable
{
public int compareTo(object o){};
}
这个compareTo()方法的功能是:如果这个对象小于对象o,则返回负值;若这个对象大于对象o,则返回正值;若两者相等,则返回0。