这里仅转自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的面向对象特性,包括对象、属性、以及反射API的使用。`ObjectCompareUtil`工具类提供了一种通用的方式来比较两个对象的属性,而`...
1.一款将java对象转成json或是将json转成java对象的jar文件; 2.在网上找了半天才找到,希望大家共享; 3.使用方法,大家在网上随便找,很多,很简单,一看便会; 4.此包在eclipse中和AndroidStudio中都可以用,但是,你如果...
"Excel列表转化成java对象"的主题就聚焦于这个过程,它涉及到Java对Excel和CSV文件的解析以及数据映射到Java对象的技术。 首先,我们要了解如何在Java中处理Excel文件。Java提供了多种库来处理Excel,如Apache POI...
【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...
本书内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化 Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。...
答:将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象] 从Java对象生成JSON的过程称为 [序列化Java对象到JSON] 为什么用它? 答:我数据库中的主键是使用雪花算法生成的,就是因为用id的位数太多,导致在...
3. **Java对象到XML**: 如果需要将Java对象序列化为XML,可以使用`XmlMapper`的`write()`方法,将Java对象写入到OutputStream或Writer。 在压缩包中的`Betwixt_xml_to_JavaObject`文件可能包含了具体的示例代码,...
Java面向对象程序设计是计算机编程领域中的核心主题,它基于面向对象编程(OOP)理念,使得代码更具有模块化、可复用性和易于维护的特点。以下是对标题和描述中涉及的知识点的详细阐述: 1. **第1章:Java入门** -...
Java面向对象编程PDF 在这篇文章中,我们将对Java面向对象编程的基础知识进行总结和解释。面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序设计看作是对象的交互,对象之间的关系和行为...
通过构建DOM树,你可以遍历树并创建对应的Java对象,或者从Java对象生成DOM树再输出为XML。 3. **DOM4J**:这是一个流行的Java库,提供了更高级别的API来操作XML。可以使用DOM4J的`DocumentHelper`创建`Document`,...
C++与Java在面向对象特性上的比较: 1. 封装:两者都支持封装,即隐藏对象的内部实现细节,通过公有接口暴露必要的功能。C++通过访问修饰符(public, private, protected)来控制成员的可见性,而Java则有类似的机制...
1. 将Java对象转换为JSON字符串,同样使用`ObjectMapper`: ```java User john = new User(1, "John", "john@example.com"); String johnJson = mapper.writeValueAsString(john); ``` 2. 对于集合类型,如List或...
Java CopyUtil工具类,可以进行对象的深copy,比如:对象里面包含对象,对象里面包含Map,List,Set...等复杂类型的属性都可以copy,copy后的对象与原有对象没有联系,即改变原有对象内容,不会改变copy后的对象里面的...
java班级管理系统(java+面向对象+源码) java班级管理系统(java+面向对象+源码) java班级管理系统(java+面向对象+源码) java班级管理系统(java+面向对象+源码) java班级管理系统(java+面向对象+源码) java班级管理...
下面将深入探讨如何在Java中实现对象数组向JSON的转换,并反过来将JSON字符串转换为Java对象数组,同时也会提及一些相关技术和代码示例。 ### Java对象数组转JSON 首先,我们来看如何将一个Java对象数组转换成JSON...
本教程对比了两种广泛应用的面向对象语言——C++和Java,帮助读者深入理解两者之间的异同。 C++是Bjarne Stroustrup于1983年创建的,它是C语言的扩展,增加了类、模板、异常处理等面向对象特性。C++强调性能和灵活...
定义protobuf文件(包含enum,message,required,optional,repeated, 结构体定义中引用另一个结构体), 生成java文件,能够构建java对象,并转化为字节byte或者流,能够将流或字节转化为对象