`
jimphei
  • 浏览: 38159 次
  • 性别: 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]);
     }


	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics