Java学习个人笔记总结——对象的比较等问题

1、关于对象之间的比较

利用compareTo的借口比较,注意排序以及比较定义比较的方法,示例如下:

 public int compareTo(Employee other)
   {  
      if (salary < other.salary) return -1;
      if (salary > other.salary) return 1;
      return 0;
   }//排序的顺序,compareto类的作用,注意返回值

“==”用于比较是否同一个对象,比较内容可以调用object类中的equals方法

覆盖equals方法的要求:

自反性(reflexive): x.equals(x)= true.

 对称性(symmetric):如果 x.equals(y) =true,那么 y.equals(x)=true.

 传递性(transitive):如果 x.equals(y) = true 并且y.equals(z) = true,那么 x.equals(z)= true.

 一致性(consistent):只要对象的状态没 有发生改变, x.equals(y)的多次调用应该 返回一致的结果

 x.equals(null)=false

2、arrays.sort对相应的泛型进行排序的思路

要重载cmp,对于comparator要进行重载,注意泛型定义时要重新定义获取数据的方法,set以及get的方法都要重新定义

示例如下:

package cn.edu.bit.cs;
import java.util.Arrays;
import java.util.Comparator;

class Person//重写person类的方法
{
	private String FirstName;
	private String LastName;
	private int age;
	//重写三种获取名字和年龄的方法
	public void setFirstName(String FirstName)
	{
		this.FirstName=FirstName;
	}
	public void setLastName(String LastName)
	{
		this.LastName=LastName;
	}
	public void setAge(int age)
	{
		this.age=age;
	}
	public String getFirstName()
	{
		return FirstName;
	}
	public String getLastName()
	{
		return LastName;
	}
	public int getAge()
	{
		return age;
	}
}
class AgeComparator_up implements Comparator<Person>
{
	@Override
	public int compare(Person o1,Person o2)
	{
		int age1=o1.getAge();
		int age2=o2.getAge();
		if(age1<age2)
			return 1;
		else if(age1>age2)
			return -1;
		else
			return 0;
	}
}//按照升序排序
class AgeComparator_down implements Comparator<Person>//按照降序排序
{
	@Override
	public int compare(Person o1,Person o2)
	{
        int age1=o1.getAge();
        int age2=o2.getAge();
        if(age1>age2)
        	return 1;
        else if(age1<age2)
        	return -1;
        else
        	return 0;
	}
}
public class MySort {
	public static void main(String[] args)
	{
	 Person[] persons = new Person[4];
     persons[0] = new Person();
     persons[0].setFirstName("Elvis");
     persons[0].setLastName("Goodyear");
     persons[0].setAge(56);

     persons[1] = new Person();
     persons[1].setFirstName("Stanley");
     persons[1].setLastName("Clark");
     persons[1].setAge(8);

     persons[2] = new Person();
     persons[2].setFirstName("Jane");
     persons[2].setLastName("Graff");
     persons[2].setAge(16);

     persons[3] = new Person();
     persons[3].setFirstName("Nancy");
     persons[3].setLastName("Goodyear");
     persons[3].setAge(69);
     Arrays.sort(persons, new AgeComparator_up());//按照降序的排序
     System.out.println("down sorted");
     for (int i=0;i<4;i++)
     {
    	 Person person=persons[i];
    	 String firstName=person.getFirstName();
    	 String lastName=person.getLastName();
    	 int age=person.getAge();
    	 System.out.println(lastName+","+firstName+". age:"+age);
     }
     Arrays.sort(persons, new AgeComparator_down());
     System.out.println("up sorted");
     for (int i=0;i<4;i++)
     {
    	 Person person=persons[i];
    	 String firstName=person.getFirstName();
    	 String lastName=person.getLastName();
    	 int age=person.getAge();
    	 System.out.println(lastName+","+firstName+". age:"+age);
     }
	}
	
}

注意重载comparator时相应返回值写清楚,return的值写完整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值