AP计算机A自学笔记:Comparable接口
Comparable接口用于对象的比较,任何使用Comparable接口的类必须提供compareTo方法。这个方法返回一个整数代表两个对象差值。如果相比较的两个接口类型不可比,会抛出ClassCastException
compareTo应用例子
package inheritanceAndPolymorphism;import java.util.*;public abstract class Shape implements Comparable{private String name;//constructorpublic Shape(String shapeName) {name = shapeName;}public String getName() { //an abstract method can have both abstract and concrete methodreturn name;}public abstract double area();public abstract double perimeter();public double semiPerimeter() {return perimeter() / 2;}public int compareTo(Object obj) {final double EPSILON = 1.0e-15; //machine precision, in case of round-off errorShape rhs = (Shape) obj;double diff = area() - rhs.area();if (Math.abs(diff) <= EPSILON * Math.abs(area())) {return 0; //area of this shape equals area of obj} else if (diff < 0) {return -1; //area of this shape less than area of obj} else {return 1; //area of this shape greater than area of obj}}/** The Circle Square, and other subclasses of Shape will automatically implement* Comparable and inherit the compareTo method*/
注意:
1对于小数的比较,要防止round-off error,因此判断是否相等不可直接等号,而是判断误差是否在计算机精度之内
2compareTo的第一步要把Object转化为该类类型(Shape),否则计算机将找不到方法Area()
下面例子在两个对象中找最大
package inheritanceAndPolymorphism;public class FindMaxTest {//return the larger of two objects a and bpublic static Comparable max (Comparable a, Comparable b) {if (a.compareTo(b) > 0) {return a;} else {return b;}}public static void main(String[] args) {// TODO Auto-generated method stub//test max on two Shape objectsShape s1 = new Circle(3.0, "circle");Shape s2 = new Square(6.5, "square");System.out.println("Area of " + s1.getName() + " is " + s1.area());System.out.println("Area of " + s2.getName() + " is " + s2.area());Shape s3 = (Shape)max(s1, s2);System.out.println("The larger shape is the " + s3.getName());}}
1本例中方法参数为Comparable类型,s1 s2均为Comparable因此不需要类型转换
2基础数据类型不是对象,不可使用Comparable
AP计算机A自学笔记:Comparable接口相关推荐
- AP计算机A自学笔记:程序分析
验证(assertions) 验证是对于一个程序在任意一点的准确描述,如果验证正确,程序在这一点工作正常 先决条件(precondition) 一段程序的先决条件指的是正要运行之前什么为真 后置条件( ...
- 计算机通信网自学笔记(1)
计算机通信网自学笔记(1) 写在前面: 笔者是电子科技大学信通学院网络工程专业的一名大二学生."在两周内对一门陌生且复杂的专业课进行自学并加以运用",这对于笔者来说是一件十分有挑战 ...
- ap计算机可以自学吧,如何自学AP课程?
国际教育网讯:国际生在完成课业后参加AP考试,得到一定的成绩后可以获得大学学分.一般修一门大学的课程要花费数千美元,而参加AP考试只需要92美元,因此选修AP课程不仅可以展现学生的能力,它还是一种省钱 ...
- JavaSE自学笔记013_Real(抽象类、接口、两种设计模式)
JavaSE自学笔记013_Real(抽象类.接口) 一.基本概述 (一)抽象类(关键字:abstract) //抽象方法 public abstract class Animal{abstract ...
- Java自学笔记——Java面向对象——04.抽象类、接口、内部类
Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...
- Java:Effective java学习笔记之 考虑实现Comparable 接口
Java 考虑实现Comparable 接口 考虑实现Comparable 接口 1.Comparable接口 2.为什么要考虑实现Comparable接口 3.compareTo 方法的通用约定 4 ...
- JAVA自学笔记25
JAVA自学笔记25 1.GUI 1)图形用户接口,以图形的方式,来显示计算机操作的界面,更方便更直观 2)CLI 命令行用户接口,就是常见的Dos,操作不直观 3) 类Dimension 类内封装单 ...
- JAVA自学笔记23
JAVA自学笔记23 1.多线程 1)引入: 2)进程 是正在运行的程序.是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 多进程: 单进程的计算机只能做一件事情,而现在 ...
- 基于Java机器学习自学笔记(第81-87天:CNN卷积神经网络的入门到全代码编写)
注意:本篇为50天后的Java自学笔记扩充,内容不再是基础数据结构内容而是机器学习中的各种经典算法.这部分博客更侧重于笔记以方便自己的理解,自我知识的输出明显减少,若有错误欢迎指正! 目录 1. CN ...
最新文章
- python 之 Pandas (五)导入导出
- 深入浅出Android系统启动流程
- SQLite的sqlite_sequence表
- 车提示检测轮胎气压_无钥匙启动的车启动后,车主带着钥匙离开车,能不能把车开走?...
- CSDN中的如何转载博文
- 分布式事务之底层原理揭秘
- 面向对象阶段个人总结
- java日期时间各种变换及处理
- python 导入包 导入模块
- ACM training贪心算法——坐椅子的背包问题
- JBoss企业级应用服务平台群集指南(一)
- ArcPad 10 的安装部署
- 2013八大免费杀毒软件排行榜
- 使用wininet的InternetReadFile下载文件
- 通用模块脚本使用案例:玩家与NPC对话
- excel表格选择下拉多选_Excel下拉多个选择或删除
- 利用Greenfoot制作简单的小游戏——记忆翻牌游戏(三)
- Barefoot可编程交换机获ATT订单
- 【观察】帆软:扎根于BI,收获于未来
- 2021-05-18