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的值写完整