Comparator VS Comparable && sort
来源:互联网 发布:多益网络ceo徐宥箴 编辑:程序博客网 时间:2024/06/06 04:40
昨天去笔试,发现居然关于这两个问题都忘得模糊了,复习一下。
1. Comparable接口
Comparable 是一个对象本身就已经支持自比较所需要实现的接口,位于java.lang下,实现该接口的类如String,int等可直接排序,
如Arrays.sort(new int[]{5,4,1,7})
该类将比较规则定义在实现该接口的类的内部,实现此接口的对象列表(和数组)可以通过Collections.sort或Arrays.sort进行自动排序。
public class ComparableTest {
/**
* @param args
*/
public static void main(String[] args) {
Student s1 = new Student((int) (Math.random()*10));
Student s2 = new Student((int) (Math.random()*10));
System.out.println(s1.equals(s2));
Student s3 = new Student((int) (Math.random()*10));
System.out.println("S1.value: "+s1);
System.out.println("S2.value: "+s2);
System.out.println("S3.value: "+s3);
List<Student> list = new ArrayList<Student>();
list.add(s1);
list.add(s2);
list.add(s3);
Collections.sort(list);//直接排序
System.out.println("AfterSort:");
for(Iterator<Student> it=list.iterator();it.hasNext();){
System.out.print(it.next()+" ");
}
}
}
class Student implements Comparable<Object> {
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public Student() {
value = 0;
}
public Student(int value) {
this.value = value;
}
//定义自己的比较规则,升序排列
@Override
public boolean equals(Object obj) {
Student s = (Student) obj;
return this.value == s.getValue();
}
@Override
public String toString() {
return Integer.toString(value);
}
@Override
public int compareTo(Object o) {
Student stu = (Student) o;
if (this.value > stu.getValue()) {
return 1;
}else if(this.value == stu.getValue())
return 0;
else
return 0;
}
}
2. Comparator接口
位于java.util下,
实现该接口的类只是一个比较规则,在对列表进行排序如Collections.sort()或Arrays.sort的时候,同时将该排序规则传入。
public class ComparatorTest {
/**
* @param args
*/
public static void main(String[] args) {
Teacher s1 = new Teacher((int) (Math.random()*10));
Teacher s2 = new Teacher((int) (Math.random()*10));
Teacher s3 = new Teacher((int) (Math.random()*10));
List<Teacher> list = new ArrayList<Teacher>();
list.add(s1);
list.add(s2);
list.add(s3);
System.out.println("Before Sorted: ");
for(Iterator<Teacher> it = list.iterator();it.hasNext();)
{
System.out.print(it.next()+" ");
}
Collections.sort(list, new MyComparator());//按照MyComparator类的排序方式排序
System.out.println("/nAfter Sorted: ");
for(Iterator<Teacher> it = list.iterator();it.hasNext();)
{
System.out.print(it.next()+" ");
}
}
}
class MyComparator implements Comparator<Teacher>
{
//自己定义排序规则类,按降序排列
@Override
public int compare(Teacher o1, Teacher o2) {
if(o1.getValue()>o2.getValue())
return -1;
else if(o1.getValue()== o2.getValue())
return 0;
else
return 1;
}
}
class Teacher
{
private int value;
public int getValue() {
return value;
}
public Teacher()
{
value=0;
}
public Teacher(int value)
{
this.value=value;
}
public String toString()
{
return Integer.toString(value);
}
}
总结:用 Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。
另外:Collection VS Collections
- Comparator VS Comparable && sort
- Comparator vs Comparable
- Java Comparable vs Comparator
- Java Comparable vs Comparator
- Comparable vs. Comparator
- Java Comparator Vs. Comparable
- Comparable vs Comparator
- Java Sorting: Comparator vs Comparable
- 黑马程序员:Comparable vs Comparator
- Java Sorting: Comparator vs Comparable
- Comparable vs Comparator in Java
- Comparable vs. Comparator in Java
- 比较器 comparable vs comparator
- Comparable和Comparator以及Arrays.sort方法
- 个人笔记 collections.sort comparator comparable
- Comparable & Comparator
- Comparator Comparable
- Comparable&Comparator
- 3D渲染采用BS架构还是桌面应用程序方式
- 企业信息化与BI系统建设规划
- 提升领导魅力的十个建议
- 一次 applet 客户端打印 jasperreport 报表任务笔记
- 几种邮件组件的使用
- Comparator VS Comparable && sort
- 《博弈三国》-- 智猪博弈
- 从管理IT到管理业务
- 创建为ClickOnce清单签名的.pfx格式数字证书,解決VS2005中ClickOnce证书一年过期问题
- COM线程模型详解
- 商业定义分析模型
- ABAP操作应用服务器文件的方式
- 赖世雄入门级美式美语学习笔记(Lesson 1)
- 零售连锁商业智能分析(BI)实例