`

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

阅读更多
可以先参考一下前面的一篇文章:为了比较,让自己的类实现Comparable接口,重写compareTo



在自己定义的类中比较两个


Name.java

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;
	}
}



NameSort.java

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



在自己定义的类中比较三个


Name.java

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;
	}
}



NameSort.java

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









.
分享到:
评论
1 楼 ocaicai 2011-06-27  
再看自己当年写的代码我依然觉得自己写得很好!

相关推荐

    VB自定义升级版Collection类

    为了克服这个限制,开发者通常会自定义一个升级版的Collection类,比如题目中的"VB自定义升级版Collection类"。 自定义的Collection类通常会扩展VB原生的Collection功能,增加对键值对的支持。这样,我们可以通过键...

    自定义元素用于将数据表格升级成图表

    10. **集成到现有项目**:自定义元素可以轻松地集成到任何现有的JavaScript项目中,无论是否使用了框架。只需要在页面中引入自定义元素的脚本,并在适当的地方插入自定义元素标签即可。 总结起来,通过JavaScript...

    regularElements将任何节点或通过CSS选择器选中的节点作为自定义元素

    在上述代码中,我们首先定义了一个名为`MyElement`的自定义元素类,然后使用`regularElements.register`注册了这个类,最后通过`regularElements.upgrade`将`#myElement`这个`&lt;div&gt;`升级为`&lt;my-element&gt;`自定义元素...

    自定义UI.rar

    在Bootstrap的基础上,自定义UI可能会包含一个具有清晰输入框、按钮和可能的辅助元素(如记住我选项、验证码等)的简洁布局。设计时要注重用户体验,确保输入字段易于辨识,错误提示明确,同时保持整体界面整洁,...

    Android自定义弹出框实现(修改版)完整实例源码

    3. **设置视图**:通过`setContentView()`方法将自定义布局加载到Dialog中。这一步将XML布局文件转换为实际的视图对象。 4. **事件处理**:为弹出框上的按钮或其他可交互元素设置点击监听器,实现相应的业务逻辑。...

    Qt自定义控件--仪表盘源码

    在本文中,我们将深入探讨如何在Qt环境中创建自定义控件,特别关注“仪表盘”这一特定案例。首先,我们要了解Qt是一个跨平台的应用程序开发框架,广泛用于编写图形用户界面(GUI)应用程序。Qt库提供了丰富的内置...

    Winform MessageBox 自定义设计样式

    7. **重用性**:为了提高代码的可维护性和复用性,可以将自定义`MessageBox`封装成一个静态类或独立的用户控件。这样,其他部分的代码只需调用预设的方法即可显示自定义的对话框,而无需关心其内部实现。 8. **响应...

    sharepoint 自定义字段类型

    2. 文档记录:像描述中提到的,“留下记录,也许以后有用”,记录自定义字段类型的实现细节和使用方法,以便后续维护和升级。 3. 可扩展性:设计时应考虑未来的需求变化,使字段类型易于扩展和适应新的功能要求。 ...

    jsp中自定义标签用法实例分析

    在TLD文件中,每个`&lt;tag&gt;`元素代表了一个自定义标签的定义。其中: - `&lt;name&gt;`标签表示在JSP页面中使用的标签名称。 - `&lt;tag-class&gt;`标签指定实现了该标签逻辑的Java类的完整路径。 - `&lt;body-content&gt;`标签定义了...

    自定义签到 V1.62

    自定义签到 V1.62 是一个专为酷Q机器人设计的插件,它允许用户根据自身需求定制签到功能。酷Q机器人是一款流行的聊天机器人软件,常用于QQ群等社交环境中,提供自动化交互和服务功能。签到功能是其中常见的一种,...

    Android自定义Switch控件

    2. **自定义布局**:自定义控件首先需要创建一个新的XML布局文件,这个布局将包含Switch的基本元素,比如两个按钮(开和关)和滑动轨道。可以使用LinearLayout或RelativeLayout作为父布局,然后添加ImageView或者...

    易语言源码易语言自定义打印源码.rar

    在这个“易语言源码易语言自定义打印源码.rar”压缩包中,包含的是一份使用易语言编写的自定义打印功能的源代码。这份源代码对于学习易语言的开发者来说,是非常有价值的参考资料,它可以帮助我们理解和掌握如何在...

    phpweb全站自定义文本

    全站自定义文本功能的核心在于提供一个中央化的文本编辑平台,用户在这里编辑的文本会全局应用到网站的各个页面。这样,无论网站有多少页面,只要一处修改,全站都会同步更新,避免了传统方式下需要逐页编辑的繁琐...

    升级版--支持ie8单选框与复选框自定义样式制作

    在现代浏览器中,开发者可以利用CSS3的特性轻松实现表单元素的自定义样式,但是IE8并不支持这些新特性,因此在IE8上实现自定义样式会面临挑战。这个升级版的资源可能包含了一些特别的CSS技巧或JavaScript库,使得在...

    sharepoint 列表自定义字段类型

    2. **实现字段控件**: 自定义字段类型需要提供用户界面(UI)元素,以便用户可以输入或查看数据。这通常通过创建自定义Web部件或使用JavaScript来实现。 3. **实现字段验证逻辑**: 如果字段有特定的输入要求,你需要...

    SINUMERIK 808D用户自定义画面开发工具

    2. **用户界面定制**:通过Visual_XML,用户能够自定义SINUMERIK 808D控制面板上的按钮、文本、图表和其他交互元素。这包括设定元素的位置、大小、颜色、字体,以及响应用户操作的行为。 3. **图形化编程**:工具...

    通信协议自定义1

    在这个自定义通信协议1中,我们看到的是一个由PC(个人计算机)与STM32(一款常见的微控制器)之间进行固件升级过程的详细流程。STM32的固件升级通常涉及安全性和稳定性,因此通信协议的设计至关重要。 首先,我们...

    自定义office2007/2010 excel和word菜单

    在2007 Microsoft Office 系统中,微软引入了一个全新的用户界面——功能区(Ribbon UI),旨在提高用户效率和生产力。这个界面取代了传统的菜单、工具栏和任务窗格,采用更加简洁且高效的布局。功能区UI包含了上...

    JAXB自定义命名前缀无效的问题

    在Java世界中,Java Architecture for XML Binding (JAXB) 是一个强大的工具,用于将Java对象绑定到XML文档,以及从XML文档反序列化为Java对象。这个过程极大地简化了XML数据的处理。然而,在实际使用中,我们可能会...

Global site tag (gtag.js) - Google Analytics