Comparable接口
- 源码如下所示,位于java.util 包
package java.lang;
public interface Comparable<T> {
public int compareTo(T o);
}
- 用法:实体类实现Comparable,并实现compareTo()方法
public class User implements Comparable<User> {
private String name;
private Integer age;
@Override
public int compareTo(User o) {
if(this.age > o.age){
return 1; // 大于
}else if(this.age == o.age){
return 0; // 等于
}else{
return -1; // 小于
}
}
}
- 用处:实现集合或数组的比较及排序
List<User> userList = new ArrayList<>();
userList.add(new User("张三",30));
userList.add(new User("王五",50));
userList.add(new User("李四",40));
Collections.sort(userList);
// 输出结果(从小到大的顺序) 张三 李四 王五
Comparator接口
- 源码如下所示,位于java.util 包
package java.lang;
public interface Comparable<T> {
public int compare(T o1, T o2);
...
}
- 用法:实体类实现Comparable,并实现compareTo()方法
public class UserCompa implements Comparable<User> {
private String name;
private Integer age;
@Override
public int compareTo(User o) {
if(this.age > o.age){
return 1; // 大于
}else if(this.age == o.age){
return 0; // 等于
}else{
return -1; // 小于
}
}
}
- 用处:实现集合或数组的比较及排序
List<User> userList = new ArrayList<>();
userList.add(new User("张三",30));
userList.add(new User("王五",50));
userList.add(new User("李四",40));
Collections.sort(userList, new UserAgeComparator()); // UserAgeComparator这里也可以使用lambda函数
// 输出结果(从小到大的顺序) 张三 李四 王五
4.特点:不用实体类实现,而使用另外的类或者lambda函数;可以随时自定义比较规则