排序接口与抽象类(java)
定义一个ISort接口,方法有升序(sortAsc),有降序(sortDesc),传入参数是一个实现Comparable接口的对象数组,即不仅仅只对数字排序,还定义了两个默认方法:
compare方法比较两个数的大小,前者大返回1,后者大返回-1,相等返回0,这能减少后续同时实现升序(sortAsc),降序(sortDesc)的冗余代码。
swap方法交换数组里的两个元素值,比较常用。
package com.bsc.algorithm.sort.inf; public interface ISort<T extends Comparable<T>> { /**
* 升序
* @param data
*/
void sortAsc(T[] data); /**
* 降序
* @param data
*/
void sortDesc(T[] data); /**
* 比较a,b两个值,a大返回1,b大返回-1,相等返回0
*
* @param a
* @param b
* @return a > b ? 1 : (a < b) ? -1 :0
*/
default int compare(T a, T b) {
int r = a.compareTo(b);
return r > 0 ? 1 : (r < 0 ? -1 : 0);
} /**
* 交换数组data第i和第j个元素
*
* @param data
* @param i
* @param j
*/
default void swap(T[] data, int i, int j) {
T temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
定义一个AbstractSort抽象类,实现ISort接口,实现sortAsc和sortDesc方法,它们都是调用抽象sort(T[] data,int cr)方法,只是cr参数不一样
cr参数是通过调用ISort接口的默认方法compare比较两个值的返回结果
package com.bsc.algorithm.sort.inf; public abstract class AbstractSort<T extends Comparable<T>> implements ISort<T> { @Override
public void sortAsc(T[] data) {
sort(data,1);
} @Override
public void sortDesc(T[] data) {
sort(data,-1);
} protected abstract void sort(T[] data,int cr);
}
在定义了上面的接口与抽象类之后,后面的每一个排序算法,只需要继承AbstractSort类,实现sort(T[] data,int cr)方法即可。
排序接口与抽象类(java)的更多相关文章
- Java集合-07Map接口及其抽象类
简介 前面把List基本记录完了,对于集合List,Map,Set,因为Set基于Map,故先记录Map. 这一篇主要记录Map接口及其抽象类(java version:1.8) 整体架构 参考上图, ...
- Effective Java 第三版—— 20. 接口优于抽象类
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- 日历类和日期类转换 并发修改异常 泛型的好处 *各种排序 成员和局部变量 接口和抽象类 多态 new对象内存中的变化
day07 ==和equals的区别? ==用于比较两个数值 或者地址值是否相同. equals 用于比较两个对象的内容是否相同 String,StringBuffer.StringBuilde ...
- Java接口和抽象类详解
父类定义了相关子类的共有属性和行为.而接口可以定义类的共同行为(包括非相关的类). 了解接口前,先来说说抽象类.抽象类介乎于普通类和接口之间,提供部分实现方法以及未实现方法,可以看作为一个半成品. 抽 ...
- (转)深入理解Java的接口和抽象类
原文地址: http://www.cnblogs.com/dolphin0520/p/3811437.html 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP ...
- 深入理解Java的接口和抽象类(转)
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- Java接口和抽象类的区别
今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...
- 深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类
目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...
随机推荐
- Ubuntu tricks
linux 复制文件夹内所有文件到另一个文件夹 cp -Rf /home/user1/* /root/temp/ 将 /home/user1目录下的所有东西拷到/root/temp/下而不拷贝user ...
- hibernate 注解大全
2019年5月1日21:39:55 原文:http://docs.jboss.org/hibernate/orm/5.4/javadocs/ 这个是hibernate 5.4版本 基于hibernat ...
- [转]Ubuntu18.04隐藏顶栏与侧栏
链接地址:https://blog.csdn.net/liu_jiangwen/article/details/85215297
- 使用命令行操作vmware esxi -- powershell
之前提到过用linux命令行的方法操作vmware,这节我们来使用powershell的方式来操作.在操作之前需要下载安装一款命令行工具PowerCLI,本节只列出一些常用命令. 个人认为powerc ...
- Ubuntu下重启mysql
启动mysql: 方式一:sudo /etc/init.d/mysql start 方式二:sudo service mysql start 停止mysql: 方式一:sudo /etc/init.d ...
- Ubuntu搭建交叉编译开发环境
在Linux驱动开发过程中,往往需要搭建交叉编译开发环境,其中,最重要的环节就是安装交叉编译工具链,本文介绍如何在Ubuntu下搭建交叉编译开发环境. 1.官网下载交叉编译工具链 链接如下: http ...
- ASP.NET-------GridView中的字段居中不了
在使用Grid View 控件的时候,回合一些css 放在一块使用之后你会发现 字段没有居中 你会发现该什么都不行 比如: HeaderStyle-HorizontalAlign="Cen ...
- mysql 启动 && 停止
启动:service mysql start关闭:service mysql stop查进程:ps aux | grep mysql杀进程:kill -9 mysqlID Good Good Stud ...
- Jenkins版本迭代以及回滚
一.摘要 在上一篇文章,链接如下: https://www.cnblogs.com/xiao987334176/p/11434849.html 镜像打的是latest版,如果需要回滚的话,就比较麻烦了 ...
- Js的iframe相关问题,如何判断当前是否在iframe中,iframe和它的父窗口如何通信
一.前言: 在web中,为了丰富我们的内容,往往需要引用其它HTML文件,这时候就需要用到 iframe 标签,本文就主要记录一下使用iframe所需要注意的问题 iframe 所使用的环境(笔者所遇 ...