类对象之间比较"大小"往往是很有用的操作,比如让对象数组排序时,就需要依赖比较操作.对于不同的类有不同的语义.如Student类,比较2个学生对象可以比较他们的score分数来评判. Java不支持预算符重载,我们通过实现Comparable接口达到相同的目的.当类实现了Comparable接口,则认为这个类的对象之间是可比较的. Comparable是java SDK中的一个内置的泛型接口. 源代码:(很简单,只有规定了一个接口方法) public interface Compara…
Comparator位于包java.util下,比较器,是在集合外部定义排序.Comparable位于包java.lang下,代表当前对象可比较的,是在集合内部实现排序. Comparable代表一个对象内部支持排序(比如String类,Integer类,内部实现了Comparable接口) Collections.sort(list<T>)中,T必须实现Comparable接口. Comparable只需实现compareTo()函数即可 public int compareTo(Objec…
昨天接到一个实习公司的电话面试,来的很突然,没有准备. 由于以前没用过,在被他问及是否用过JAVA的排序工具Comparable与Comparator时,没有回答上来,只能实话实说没有用过. 感觉太丢人了~~回去赶紧看看,现在将学到的东西记录下来,同大家分享~~ 先说Comparable接口,public interface Comparable<T>.当需要根据类中的成员变量对类进行排序时,只需实现该接口,覆写compareTo方法即可非常方便~~ 该接口中只有一个方法--int compa…
一.comparable和Comparator的区别 1.Comparable和Comparator都是用来实现集合中元素的比较.排序的. 2.Comparable是在类内部定义的方法实现的排序,位于java.lang下. 3.Comparator是在类外部实现的排序,位于java.util下. 4.实现Comparable接口需要覆盖compareTo方法,实现Comparator接口需要覆盖compare方法. 5.Comparable接口将比较代码嵌入需要进行比较的类的自身代码中,而Com…
类实现了Comparable接口就表明类的实例本身具有内在的排序关系(natural ordering). 因此,该类可以与很多泛型算法和集合实现进行协作. 而我们之需要实现Comparable接口唯一的方法——compareTo. 以下是相关规则: sgn(x.compareTo(y)) = -sgn(y.compareTo(x)) (x.compareTo(y)>0 && y.compareTo(z)>0) 则 x.compareTo(z)>0 x.compareTo…
一.Comparable接口, Collections类 List的常用算法: sort(List); 排序,如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 实现比较两个类大小的方法 shuffle(List); 随机排列 void reverse(List); 逆序排列(Linked效率较高) copy(); 复制集合, 前提是size()相同(长度, 和容量的区别) fill(List, Object);使用某个对象填充整个List binarySearch()…
三.接口优于抽象类 java提供两种机制,可以用来定义一个允许多个实现的类型:接口和抽象类.由于java只允许单继承,所以,抽象类作为类型定义受到了极大的限制. 已有的类可以很容易被更新,以实现新的接口.你所需要做的是:增加要求的方法,如果这些方法原先还不存在的话:然后在类的声明上增加一个implements子句. 接口是定义mixin(混合类型)的理想选择.一个mixin是指这样的类型:一个类除了实现它的”基本类型(primary type)"之外,还可以实现这个mixin类型,以表明它提供了…
一.使类和成员的可访问能力最小化 要想区别一个设计良好的模块与一个设计不好的模块,最重要的因素是,这个模块对于外部的其他模块而言,是否隐藏了内部的数据和其他的实现细节.一个设计良好的模块会隐藏所有的实现细节,把他的API与实现清晰的隔离开来.模块之间只能通过它们的API进行通信,一个模块不需要知道其他模块的内部工作情况.这个概念被称为信息隐藏(information hiding)或封装(encapsulation),是软件设计的基本原则之一. 信息隐藏的优点: 1.可以有效地解除一个系统中各个…
第十三条:使类和成员的可访问性最小化 一个设计良好的模块会将实现细节隐藏起来,只将暴露API.模块之间调用并不知道对象的细节.这个概念成为信息隐藏或封装.要注意一点,设计的一个方法或者其他什么,只要不是私有的,外面能访问,那么以后在重构重写的过程中,这个方法就不能删掉,即使只是某个方法中的一个过程.非零数组总是可变的,即使加了final,里面的内容也是可变的: public static final Thirteenth[] values = {new Thirteenth(), new Thi…
class Student implements Comparable{ String name; int gpa; @Override public int compareTo(Object arg0) { // TODO Auto-generated method stub Student s = (Student)arg0; if(gpa == s.gpa) return name.compareTo(s.name); else if(gpa < s.gpa) return -1; els…