自定义类中2个元素的比较升级到3个元素的比较

可以先参考一下前面的一篇文章:[url=http://ocaicai.iteye.com/blog/794438]为了比较,让自己的类实现Comparable接口,重写compareTo[/url]

[img]http://dl.iteye.com/upload/picture/pic/74922/df1dff8e-5e4f-3315-91fd-b01449dbf242.jpg[/img]

[size=large][color=blue]在自己定义的类中比较两个[/color][/size]


[color=blue]Name.java[/color]


package comparable;

class Name implements Comparable<Name> {
public String firstName, lastName;

public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

public int compareTo(Name o) { // 实现接口
int lastCmp = lastName.compareTo(o.lastName);
// 首先比较姓(lastName)如果姓相同(lastCmp==0)再比较名(firstName),否则返回名的比较
//即是:这一级只要不等就有先后了,如果等,进入下一级比较
return (lastCmp == 0 ? firstName.compareTo(o.firstName) : lastCmp);
}

public String toString() { // 便于输出测试
return firstName + " " + lastName;
}
}



[color=blue]NameSort.java[/color]


package comparable;

import java.util.*;

public class NameSort {
public static void main(String[] args) {
Name[] nameArray = { new Name("John", "Lennon"),
new Name("Karl", "Marx"), new Name("Groucho", "Marx"),
new Name("Oscar", "Grouch") };
Arrays.sort(nameArray);
for (int i = 0; i < nameArray.length; i++) {
System.out.println(nameArray[i].toString());
}
}
}
输出结果:
Oscar Grouch
John Lennon
Groucho Marx
Karl Marx



[size=large][color=blue]在自己定义的类中比较三个[/color][/size]


[color=blue]Name.java[/color]


package comparable2;

class Name implements Comparable<Name> {
/*
* 相对于包comparable来说,这个在原来前后2个的比较上实现了前中后3个的比较
* 最重要的是对compareTo方法的书写
* */

public String firstName, centerName, lastName;

public Name(String firstName, String centerName, String lastName) {
this.firstName = firstName;
this.centerName = centerName;
this.lastName = lastName;
}

public int compareTo(Name o) {
int firstCmp = firstName.compareTo(o.firstName);
int centerCmp = centerName.compareTo(o.centerName);
int lastCmp = lastName.compareTo(o.lastName);
if (lastCmp == 0) {
if (centerCmp == 0) {
return firstCmp;
} else {
return centerCmp;
}
} else {
return lastCmp;
}
}

public String toString() { // 便于输出测试
return firstName + " " + centerName + " " + lastName;
}
}



[color=blue]NameSort.java[/color]


package comparable2;

import java.util.*;

public class NameSort {
public static void main(String[] args) {
Name[] nameArray = { new Name("c", "b", "a"),new Name("a", "b", "a"),
new Name("c", "a", "b"), new Name("c", "b", "b") };
Arrays.sort(nameArray);
for (int i = 0; i < nameArray.length; i++) {
System.out.println(nameArray[i].toString());
}
}
}
输出结果:(注意:按照last->center->first顺序比较)
a b a
c b a
c a b
c b b



.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值