这里仅转自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对象的比较方式.doc
1.一款将java对象转成json或是将json转成java对象的jar文件; 2.在网上找了半天才找到,希望大家共享; 3.使用方法,大家在网上随便找,很多,很简单,一看便会; 4.此包在eclipse中和AndroidStudio中都可以用,但是,你如果...
本书内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化 Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。...
主要介绍了计算一个Java对象占用字节数的方法,较为详细的分析了Java中各类对象所占用的字节数,需要的朋友可以参考下
答:将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象] 从Java对象生成JSON的过程称为 [序列化Java对象到JSON] 为什么用它? 答:我数据库中的主键是使用雪花算法生成的,就是因为用id的位数太多,导致在...
JAXB工具类 xml转为java对象 java对象转为xml ,本人亲测,可以使用!!!
xml文件自动转成java对象工具,生成xsd文件,xsd转java
个人对于Java对象在JVM中的探讨,Java对象是怎么产生的,内存模型是什么样的?
定义protobuf文件(包含enum,message,required,optional,repeated, 结构体定义中引用另一个结构体), 生成java文件,能够构建java对象,并转化为字节byte或者流,能够将流或字节转化为对象
习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢...
Java对象和类 Java对象和类 Java对象和类 最详细说明了关系的用途
主要用于将java对象转换为json对象字符串,或字符串数组。
json格式与java类对象相互转换。json格式转换成java类对象,List,Map。类对象转换成json。
这是本人写的一个基于JSON的完整项目,实现了Java对象、数组、集合转换为Json(Json转化为Java对象、数组、集合)。这是一个完整的项目,下载解压后直接导入MyEclipse/Eclipse中,运行com.demo.JSONDemo类即可看到效果...
Java CopyUtil工具类,可以进行对象的深copy,比如:对象里面包含对象,对象里面包含Map,List,Set...等复杂类型的属性都可以copy,copy后的对象与原有对象没有联系,即改变原有对象内容,不会改变copy后的对象里面的...
xml报文和java对象互相转换 相关jar包和测试代码,可以与castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具1.2(https://download.csdn.net/download/kemoing/10864595)完美配合使用