java基础-排序跟比较
java基础-排序和比较
Comparator 强行对某个对象 collection 进行整体排序 的比较函数
当且仅当对于一组元素 S 中的每个 e1 和 e2 而言,c.compare(e1, e2)==0 与 e1.equals(e2) 具有相等的布尔值时,Comparator c 强行对 S 进行的排序才叫做与 equals 一致 的排序。
当使用具有与 equals 不一致的强行排序能力的 Comparator 对有序 set(或有序映射)进行排序时,应该小心谨慎。
public interface Comparable<T>
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
java.util.Arrays
此类包含用来操作数组(比如排序和搜索)的各种方法
自然排序的核心就是比较对象的大小,比如年龄 金额 工作年限等。
我们来看comparable的实现类
Integer
compareTo(Integer anotherInteger)
在数字上比较两个 Integer 对象。
String
compareTo(String anotherString)
按字典顺序比较两个字符串。
calendar
compareTo(Calendar anotherCalendar)
比较两个 Calendar 对象表示的时间值(从历元至现在的毫秒偏移量)。
Date
compareTo(Date anotherDate)
比较两个日期的顺序。
File
compareTo(File pathname)
按字母顺序比较两个抽象路径名。
我们再来看一个例子
public class User implements Comparable {
private String id;
private int age;
public User(String id, int age) {
this.id = id;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int compareTo(Object o) {
return this.age - ((User) o).getAge();
}
/**
* 测试方法
*/
public static void main(String[] args) {
User[] users = new User[] { new User("a", 30), new User("b", 20) };
Arrays.sort(users);
for (int i = 0; i < users.length; i++) {
User user = users[i];
System.out.println(user.getId() + " " + user.getAge());
}
}
}
还有另外一个例子
import java.util.Arrays;
import java.util.Comparator;
public class UserComparator implements Comparator {
public int compare(Object o1, Object o2) {
return ((User) o1).getAge() - ((User) o2).getAge();
}
/**
* 测试方法
*/
public static void main(String[] args) {
User[] users = new User[] { new User("a", 130), new User("b", 20) };
Arrays.sort(users);
for (int i = 0; i < users.length; i++) {
User user = users[i];
System.out.println(user.getId() + " " + user.getAge());
}
}
}
Comparator 强行对某个对象 collection 进行整体排序 的比较函数
当且仅当对于一组元素 S 中的每个 e1 和 e2 而言,c.compare(e1, e2)==0 与 e1.equals(e2) 具有相等的布尔值时,Comparator c 强行对 S 进行的排序才叫做与 equals 一致 的排序。
当使用具有与 equals 不一致的强行排序能力的 Comparator 对有序 set(或有序映射)进行排序时,应该小心谨慎。
public interface Comparable<T>
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
java.util.Arrays
此类包含用来操作数组(比如排序和搜索)的各种方法
自然排序的核心就是比较对象的大小,比如年龄 金额 工作年限等。
我们来看comparable的实现类
Integer
compareTo(Integer anotherInteger)
在数字上比较两个 Integer 对象。
String
compareTo(String anotherString)
按字典顺序比较两个字符串。
calendar
compareTo(Calendar anotherCalendar)
比较两个 Calendar 对象表示的时间值(从历元至现在的毫秒偏移量)。
Date
compareTo(Date anotherDate)
比较两个日期的顺序。
File
compareTo(File pathname)
按字母顺序比较两个抽象路径名。
我们再来看一个例子
public class User implements Comparable {
private String id;
private int age;
public User(String id, int age) {
this.id = id;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int compareTo(Object o) {
return this.age - ((User) o).getAge();
}
/**
* 测试方法
*/
public static void main(String[] args) {
User[] users = new User[] { new User("a", 30), new User("b", 20) };
Arrays.sort(users);
for (int i = 0; i < users.length; i++) {
User user = users[i];
System.out.println(user.getId() + " " + user.getAge());
}
}
}
还有另外一个例子
import java.util.Arrays;
import java.util.Comparator;
public class UserComparator implements Comparator {
public int compare(Object o1, Object o2) {
return ((User) o1).getAge() - ((User) o2).getAge();
}
/**
* 测试方法
*/
public static void main(String[] args) {
User[] users = new User[] { new User("a", 130), new User("b", 20) };
Arrays.sort(users);
for (int i = 0; i < users.length; i++) {
User user = users[i];
System.out.println(user.getId() + " " + user.getAge());
}
}
}