java中Comparable实现对象的比较
/*
class A implements Comaprable<A>{
}
那么 A x = new A(); 类关系图
Object o = A; Object
Comparable c = A; | Comparable
A 实现了 Comparable 接口嘛 |-----|-----A
所以有 o instanceof A == true;
o instanceof Comparable == true; 例如ArrayList添加对象实例时,对象实例添加之后先向上转型为Object!内部用Object[]数组接收!
Arrays.sort()对Object排序的函数内部就是将 Object 向下转型为Comparable类型。
因为每个对象实现了Comparable接口,利用多态性,(Comparable)o1).compareTo(o2)将调用子类的compareTo()方法! ((Comparable<Object>)o1).compareTo((Student)o2);
((Comparable<XXX>)o1).compareTo((YYY)o2);
如果想写泛型那么 XXX 要么是同一类型,要么XXX是YYY的父类!因为我们强转的Comparable是比较XXX类型数据的,
而YYY类型满足上面的条件才能成功向上转型为XXX类型!
*/ class Person implements Comparable<Person>{
String name;
int age;
Person(){
name = "";
age = 0;
}
Person(String name, int age){
this.name = name;
this.age = age;
}
public String toString(){
return name + "...." + age;
} public boolean equals(Object o){
Person x = (Person)o;
return name.equals(x.name) && age==x.age;
} public int compareTo(Person o){ if(name.compareTo(o.name)==0)
return o.age - age;
return o.name.compareTo(name);
}
} class Student implements Comparable<Student>{
String name;
int age;
public Student(){
name = "";
age = 0;
}
public Student(String name, int age){
this.name = name;
this.age = age;
} public int compareTo(Student o){ if(name.compareTo(o.name)==0)
return o.age - age;
return o.name.compareTo(name);
}
} public class Test{
public static void main(String[] args){ Person p = new Person("fsf", 45);
Student s = new Student("faga", 20);
Student ss = new Student("fsfdfsf", 456);
Comparable xx = (Comparable)s;
System.out.println(xx);
cmp(s,ss);
}
public static int cmp(Object o1, Object o2){
//return ((Comparable<Object>)o1).compareTo((Student)o2); return ((Comparable)o1).compareTo((Student)o2);
}
}
java中Comparable实现对象的比较的更多相关文章
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
- Java 中 Comparable 和 Comparator 比较
Java 中 Comparable 和 Comparator 比较 目录: Comparable Comparator Comparable 和 Comparator比较 第二个例子 之 Compar ...
- Java中的函数对象
初次听说java中的函数对象可能,比较的陌生.可以类比着来理解一下,人们常说java中没有了指针,殊不知,java中的对象引用就是指针,有时候我们说一个对象往往指的就是这个对象的引用,也就是说基本上把 ...
- java中的string对象深入了解
这里来对Java中的String对象做一个稍微深入的了解. Java对象实现的演进 String对象是Java中使用最频繁的对象之一,所以Java开发者们也在不断地对String对象的实现进行优化,以 ...
- java中对集合对象list的几种循环访问
java中对集合对象list的几种循环访问的总结如下 1 经典的for循环 public static void main(String[] args) { List<String> li ...
- (转)java中对集合对象list的几种循环访问总结
Java集合的Stack.Queue.Map的遍历 在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...
- Java中创建实例化对象的几种方式
Java中创建实例化对象有哪些方式? ①最常见的创建对象方法,使用new语句创建一个对象.②通过工厂方法返回对象,例:String s =String.valueOf().(工厂方法涉及到框架)③动用 ...
- Java中字节与对象之间的转换
近期公司里面用到了消息队列,而正如我们知道的是消息队列之间的是通过二进制形式的.以下就分享一下java中字节与对象之间的转换. 主要是用到了ByteArrayOutputStream和ObjectOu ...
- Java中创建的对象多了,必然影响内存和性能
1, Java中创建的对象多了,必然影响内存和性能,所以对象的创建越少越好,最后还要记得销毁.
随机推荐
- a标签创建超链接,利用a标签创建锚点
#Html今日学习内容 <!DOCTYPE html> <html> <head lang="en"> <meta charset ...
- oracle根据视图删除表
delete from t_fwaqjcjl where zcbm in (select zcbm from view_fwaqjcjl where 1=1 )
- List 源码分析笔记
List Class Diagram: 笔记一: 1.Iterable 接口只定义一个iterator()方法. Iterator 接口有hasNext, next, remove方法. ListIt ...
- Objective-C 关联
在项目开发中,经常会使用到关联,就是将两个实例对象绑定,使得其中一个实例对象成为另一个实例对象的一部分.关联特性在mac os 10.6 及ios 3.1以上才可以使用. 关联的使用是基于关键字来实现 ...
- Vs2013 头文件注释
在vs2013的默认安装目录 1.CS类修改方式 在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTempla ...
- 如何重载delegate
在写delegate的时候遇到一个问题,在已有一个不带参数的delegate基础上,试图再增加一个带参数的delegate,结果VS报了“already contains a definition f ...
- 使用阿里云负载均衡遭遇的http重定向https的问题
昨天解决了在阿里云负载均衡上部署https证书的问题(详见一个空行引起的阿里云负载均衡上部署https证书的问题),并完成了部署,负载均衡的监听配置是这样的: 用户与负载均衡之间走https协议,负载 ...
- 每周一书-编写高质量代码:改善C程序代码的125个建议
首先说明,本周活动有效时间为2016年8月28日到2016年9月4日.本周为大家送出的书是由机械工业出版社出版,马伟编著的<编写高质量代码:改善C程序代码的125个建议>. 编辑推荐 10 ...
- 团队项目——站立会议DAY14
第十四次站立会议记录: 参会人员:张靖颜,钟灵毓秀,何玥,赵莹,王梓萱 项目进展: 1.张靖颜:修改页面,查漏补缺.进行需求分析,监督每个组员,把大家的问题都一一梳理. 2.钟灵毓秀:继续修改模块代码 ...
- java输出任意两个日期之间有多少天
package JingDian; import java.text.ParseException; import java.text.SimpleDateFormat; import java.ut ...