Comparable与Comparator
Comparable 和 Comparator 都是用来实现集合中元素的比较、排序的。
只是 Comparable 是在集合内部定义的方法实现的排序,而Comparator 是在集合外部实现的排序,
所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。
Comparator位于包java.util下,而Comparable位于包 java.lang下
一.Comparable 是一个对象,本身就已经支持自比较所需要实现的接口(如 String、Integer 自己就可以完成比较大小操作,已经实现了Comparable接口)
自定义的类要在加入list容器中后能够排序,可以实现Comparable接口,在用Collections类的sort方法排序时,如果不指定Comparator,那么就以自然顺序排序,这里的自然顺序就是实现Comparable接口设定的排序方式。
二.Comparator 是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。
可以说一个是自已完成比较,一个是外部程序实现比较的差别而已。
用 Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。
1.Comparable用法示例:
需求:
每一个学生都有对应的归属地。
学生Student,地址String
学生属性:姓名,年龄
注意:姓名和年龄相同的视为同一个学生,保证学生的唯一性。
1.描述学生。
2.定义map容器,将学生作为键,地址作为值。存入。
3.获取map集合中的元素。
A.(代码MapTest.java)
package com.zlc.collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
class Student6 implements Comparable{
private String name;
private int age;
public Student6(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return “姓名:”+name+”–>年龄:”+age;
}
//复写hashCode()和equals()方法
public int hashCode() {
return name.hashCode()+age*34;
}
public boolean equals(Object obj) {
if(!(obj instanceof Student6)) {
throw new ClassCastException(“类型不匹配–>不是学生对象”);
}
Student6 s = (Student6) obj;
return this.name.equals(s.name) && this.age == s.age;
}
@Override
public int compareTo(Student6 o) {
int num = new Integer(this.age).compareTo(new Integer(o.age));
if(num == 0){
return this.name.compareTo(o.name);
}
return num;
}
}
public class MapTest {
public static void main(String[] args) {
HashMap
本文详细介绍了Java中Comparable和Comparator的区别与用法。Comparable主要用于集合内部的排序,而Comparator则用于集合外部的排序。文章通过具体示例展示了如何在自定义类中实现Comparable接口以实现自然排序,以及如何自定义Comparator接口来满足特定的比较需求。
1577

被折叠的 条评论
为什么被折叠?



