JAVA排序方法调用
2020-03-06 16:42
1046 查看
排序语句的使用
初转java,很多操作都要重新学习java的版本。比如今天的主角:排序语句。
在程序设计过程中,排序算法是最常用到的算法之一,正是因为其经常用到,所以掌握利用已经设计好的算法语句,会大大提升程序设计过程中的效率。主要优点如下:
- 进行排序仅需要一句话,方便书写
- 设计好的算法,确保正确率
- 算法出自高手,保证运行效率
那么与C语言qsort和sort不同的是,JAVA语言中并不存在孤立的方法,所有的方法都在类中。所以,今天的主角sort函数,就出现在数组类Array中。
它的调用方式为:
Arrays.sort(Object[] o,int );
括号中,传递需要排序的数组,默认为升序排序。
那么这里就会产生几个问题
- 默认顺序为升序,想要降序该怎么办?
- 对象数组可以进行排序吗?
回答
在回答问题之前,我有必要引入两个十分相似的接口,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中调用Js的方法 & java.net.Url的使用 & Url中文乱码的解决 & Map 排序
- java 编程思想中的PriorityBlockingQueue 部分里对PrioritizedTask的排序没有显式调用collection的sort方法。而是通过take时做的这个动作
- Lesson_for_java_day07--java中数组的定义及常见排序方法--冒泡法、简单选择法、直接插入法和调用方法排序
- 如何在Java中实现远程方法调用
- 如何在C/C++中调用Java的方法
- 以优雅直观的方式调用JAVA对象方法和读写JAVA对象成员
- Java远程方法调用 4
- DWR中各种java方法的调用
- 通过Java反射调用方法
- 基于Ajax和JSON从javascript中调用后台java方法的JsonGateway
- Java远程方法调用 3
- 调用java的私有方法
- JAVA几种排序方法
- java 线程遇到的问题及解决方法 JNI调用
- DWR中各种java方法的调用
- delphi程序参数的使用与java调用外部程序方法
- Java远程方法调用
- sybase存储过程的写法以及java的调用方法
- Java远程方法调用
- java方法调用时,是传值还是传引用?(转)