`
jimphei
  • 浏览: 39740 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

java对象的比较

阅读更多

这里仅转自javaeye的一篇文章;
排序的算法是我们最常用的算法,初学程序,每个人都尝试过排序。但只是局限于简单的排序。
如将下列数字进行排序
1,3,5,8,3,6
于是我们得出结果
1,3,3,5,6,8
将下列字母(字符)进行排序
a,i,e,f,w,s
于是我们得出结果
a,e,f,i,s,w
但是我们遇到的情况就不是如此简单了。如给公司里的商品进行排序,我们很轻易的想到按照商品的名称排序不就完了,而且简单明了。但现实并如我们相信般简单。同一商品名称可以有不同的批次,进货时间,可能还会有单价的不同。显然只根据商品名称排序是不合理的。

再举个简单例子然后用程序实现。如公司要将员工进行排序(不要说领导排在前面),假设我们的需求比较复杂。先进行姓排序,谁的姓拼音靠前,谁就排前面。然后对名字进行排序。恩.如果同名,女性排前头。如果名字和性别都相同,年龄小的排前头。ok,一个也不算复杂的需求。

如果对java比较熟悉的会知道java.util.Comparator 接口。要实现里面的函数
int compare(Object o1, Object o2) 返回一个基本类型的整型,返回负数表示o1 小于o2,返回0 表示o1和o2相等,返回正数表示o1大于o2。

于是我们设计的人员类要有几个变量,firstname,lastname,sex,age分别表示姓,名,性别,年龄。
代码如下

import java.util;
class Person
{
	private String firstName;
	private String lastName;
	private boolean sex;
	private Integer age;
	public String getFirstName()
	{
		return firstName;
	}
	public void setFisrtName(String f)
	{
		this.firstName=f;
	}
		public String getLastName()
	{
		return lastName;
	}
	public void setLastName(String l)
	{
		this.lastName=l;
	}
	public boolean getSex()
	{
		return sex;
	}
	public Integer getAge()
	{
		return age;
	}
	public Person(String f,String l,boolean b,int a)
	{
		this.firstName=f;
		this.lastName=l;
		this.sex=b;
		this.age=a;
	}
	public String toString()
	{
		return this.getFirstName()+" "+this.getLastName()+" "+sex.booleanValue()?"男":"女"+" "+this.getAge();
	}
}
class Comparators{
public static Comparator getComparator(){
	return new Comparator(){

	public int compare(Object obj1,Object obj2)
	{
		if(obj1 instanceof String)
		{
			return compare((String)obj1,(String)obj2);
		}
		else if(obj1 instanceof Integer)
		{
			return compare((Integer)obj1,(Integer)obj2);
		}
		else if(obj1 instanceof Person)
		{
			return compare((Person)obj1,(Person)obj2);
		}
		else
		{
			System.out.println("没有找到合适的比较器");
		}
	}
	public int compare(String o1,String o2)
	{
		int len1=o1.length();
		int len2=o2.length();
		int len=Math.min(len1,len2);
		char[] v1=o1.toArrayChar();
		char[] v2=o2.toArrayChar();
		int pos=0;
		while(len--!=0)
		{
			char c1=v1[pos];
			char c2=v2[pos];
			if(c1!=c2)
			{
				return c1-c2;
			}
			pos++;
		}
		return len1-len2;
	}
	public int compare(Integer o1,Integer o2)
	{
		int i1=o1.intValue();
		int i2=o2.intValue();
		return i1<i2?-1:(i1==i2?0:1);
	}
	public int compare(Person o1,Person o2)
	{
		String firstname1=o1.getFirstName();
		String firstname2=o2.getFirstName();
		String lastname1=o1.getLastName();
		String lastname2=o2.getLastName();
		boolean sex1=o1.getSex();
		boolean sex2=o2.getSex();
		Ingeter age1=o1.getAge();
		Ingeter age2=o2.getAge();
		return compare(firstname1,firstname2)==0?(compare(lastname1,lastname2)==0?(compare(sex1,sex2)==0?compare(age1,age2):compare(sex1,sex2)):compare(lastname1,lastname2)):comapre(firstname1,firstname2);
	}

	};
}

}
public class Main
{
	public static void main(String[] args)
	{
         Person[] person = new Person[] {
         new Person("ouyang", "feng", Boolean.TRUE, new Integer(27)),
         new Person("zhuang", "gw", Boolean.TRUE, new Integer(27)),
         new Person("zhuang", "gw", Boolean.FALSE, new Integer(27)),
         new Person("zhuang", "gw", Boolean.FALSE, new Integer(2))
     };
     for (int i = 0; i < person.length; i++) {
       System.out.println("before sort=" + person[i]);
     }
     java.util.Arrays.sort(person, Comparators.getComparator());

     for (int i = 0; i < person.length; i++) {
        System.out.println("after sort=" + person[i]);
     }


	}
}

 

分享到:
评论

相关推荐

    java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java

    java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象...

    java 对象的容纳,java 对象的容纳,java 对象的容纳,java 对象的容纳,java 对象的容纳,java 对象的容

    java 对象的容纳,java 对象的容纳,java 对象的容纳,java 对象的容纳,java 对象的容纳,java 对象的容纳,java 对象的容纳,java 对象的容纳,java 对象的容纳,java 对象的容纳,java 对象的容纳,java 对象的...

    Java对象属性数据比较,返回变化数据

    总结起来,`Java对象属性数据比较,返回变化数据`这个主题涉及到Java的面向对象特性,包括对象、属性、以及反射API的使用。`ObjectCompareUtil`工具类提供了一种通用的方式来比较两个对象的属性,而`...

    java对象转JSON

    1.一款将java对象转成json或是将json转成java对象的jar文件; 2.在网上找了半天才找到,希望大家共享; 3.使用方法,大家在网上随便找,很多,很简单,一看便会; 4.此包在eclipse中和AndroidStudio中都可以用,但是,你如果...

    Excel列表转化成java对象

    "Excel列表转化成java对象"的主题就聚焦于这个过程,它涉及到Java对Excel和CSV文件的解析以及数据映射到Java对象的技术。 首先,我们要了解如何在Java中处理Excel文件。Java提供了多种库来处理Excel,如Apache POI...

    JAVA对象序列化保存为XML文件的工具类

    【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...

    java面向对象编程源码

    本书内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化 Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。...

    java对象映射器(基于jackson将Java对象转为json,或者将json转为Java对象)

    答:将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象] 从Java对象生成JSON的过程称为 [序列化Java对象到JSON] 为什么用它? 答:我数据库中的主键是使用雪花算法生成的,就是因为用id的位数太多,导致在...

    xml转换java对象

    3. **Java对象到XML**: 如果需要将Java对象序列化为XML,可以使用`XmlMapper`的`write()`方法,将Java对象写入到OutputStream或Writer。 在压缩包中的`Betwixt_xml_to_JavaObject`文件可能包含了具体的示例代码,...

    Java面向对象程序设计

    Java面向对象程序设计是计算机编程领域中的核心主题,它基于面向对象编程(OOP)理念,使得代码更具有模块化、可复用性和易于维护的特点。以下是对标题和描述中涉及的知识点的详细阐述: 1. **第1章:Java入门** -...

    java面向对象编程pdf

    Java面向对象编程PDF 在这篇文章中,我们将对Java面向对象编程的基础知识进行总结和解释。面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序设计看作是对象的交互,对象之间的关系和行为...

    JAVA对象与XML互转

    通过构建DOM树,你可以遍历树并创建对应的Java对象,或者从Java对象生成DOM树再输出为XML。 3. **DOM4J**:这是一个流行的Java库,提供了更高级别的API来操作XML。可以使用DOM4J的`DocumentHelper`创建`Document`,...

    面向对象编程C++和Java比较教程

    C++与Java在面向对象特性上的比较: 1. 封装:两者都支持封装,即隐藏对象的内部实现细节,通过公有接口暴露必要的功能。C++通过访问修饰符(public, private, protected)来控制成员的可见性,而Java则有类似的机制...

    json格式与java类对象相互转换

    1. 将Java对象转换为JSON字符串,同样使用`ObjectMapper`: ```java User john = new User(1, "John", "john@example.com"); String johnJson = mapper.writeValueAsString(john); ``` 2. 对于集合类型,如List或...

    Java copy对象的工具类

    Java CopyUtil工具类,可以进行对象的深copy,比如:对象里面包含对象,对象里面包含Map,List,Set...等复杂类型的属性都可以copy,copy后的对象与原有对象没有联系,即改变原有对象内容,不会改变copy后的对象里面的...

    java班级管理系统(java+面向对象+源码)

    java班级管理系统(java+面向对象+源码) java班级管理系统(java+面向对象+源码) java班级管理系统(java+面向对象+源码) java班级管理系统(java+面向对象+源码) java班级管理系统(java+面向对象+源码) java班级管理...

    java-对象数组转换为json

    下面将深入探讨如何在Java中实现对象数组向JSON的转换,并反过来将JSON字符串转换为Java对象数组,同时也会提及一些相关技术和代码示例。 ### Java对象数组转JSON 首先,我们来看如何将一个Java对象数组转换成JSON...

    面向对象编程C++和Java比较教程 中英文完整版 pdf

    本教程对比了两种广泛应用的面向对象语言——C++和Java,帮助读者深入理解两者之间的异同。 C++是Bjarne Stroustrup于1983年创建的,它是C语言的扩展,增加了类、模板、异常处理等面向对象特性。C++强调性能和灵活...

    protobuf文件定义及转化为java对象

    定义protobuf文件(包含enum,message,required,optional,repeated, 结构体定义中引用另一个结构体), 生成java文件,能够构建java对象,并转化为字节byte或者流,能够将流或字节转化为对象

Global site tag (gtag.js) - Google Analytics