黑马程序员技术交流社区
标题:
比较器都弄混了,什么是Comparator,Comparable,ComparaTo()?
[打印本页]
作者:
七丶哥
时间:
2014-9-2 23:28
标题:
比较器都弄混了,什么是Comparator,Comparable,ComparaTo()?
比较器都弄混了,什么是Comparator,Comparable,ComparaTo()?用的时候有的混啊
作者:
谢建平
时间:
2014-9-3 03:16
compareTo()和compare() 是一个方法 comparable 和comparator 是接口
comparable :对实现它的每个类的对象进行整体排序,这种排序称为类的自然排序,该类里面的重写的
compareTo比较的方法,让该类的每个对象自身具有比较性
comparator : 接口,要重写comapre(T t1,T t2)方法。
可以把实现这接口的类的对象 看成一个比较器。可用于传递给sort()方法,
如 Collections.sort(List<T> list,Comparator<? super T> c);
Arrays.sort(T[] a,Comparator<? super T> c);
还用于控制某些数据结果
在tree结构的容器时,如果存储的对象自身没有可比较性,在创建容器时,可
可以让容器自身具有比较功能,
如 TreeMap<T> tm = new TreeMap(Comparator<? super T> c);
作者:
格子、
时间:
2014-9-3 08:19
两个都是接口,一个在对象内部实现,一个单独实现可以作为参数传递,且优先级比对象内部的高!
作者:
Java黑马
时间:
2014-9-3 11:26
谢谢分享
作者:
zhxu188
时间:
2014-9-3 11:29
一开始都容易搞混淆,写得多了慢慢 就清楚了,个人体会
作者:
张周飞
时间:
2014-9-3 15:57
本帖最后由 张周飞 于 2014-9-3 16:10 编辑
/**
*
对象比较器
* 作用:对两个后者多个数据项进行比较,以确定他们是否相等或者是确定他们的大小关系及其排序。
* Arrays.sort();方法可实现对象的排序操作
* 自定义对象数组排序(自己设定值/属性 排序)
* 用到的 实现 Comparable接口。
* Comparable接口强制对实现它的每一个类的对象进行整体排序,这种排序叫:自然排序
*
* 类的:
int CompareTo(T O)方法被称为:自然比较方法。
* 原型:
public interface Comparable<T>{ //T类型/此类的对象名
* int CompareTo(T O);
*
>>>>>>>>比较此对象于指定对象的排序 int CompareTo(T O) // T此/当前对象 O参数对象<<<<<<<<<<<<
*
如果:当前对象 > 参数对象 返回正整数 一般为 1
* 当前对象 < 参数对象 返回负整数 一般为 -1
* 当前对象 = 参数对象 返回 0
*
}
* @author Administrator
*
*/
代码一:
package com.vice.personsortDemo;
import java.util.Arrays;
public class personsortDemo {
public static void main(String[] args) {
String[] names={"苍井空","松岛枫","武藤兰","吉泽明步","波多野结衣","小泽玛利亚","泷泽萝拉","美惠子"};
Arrays.sort(names);
System.out.println(Arrays.toString(names));
//------------------/以下是/--------------------
Person[] persons={ new Person("苍井空",27),new Person("松岛枫",13),
new Person("吉泽明步",33),new Person("波多野结衣",44),
new Person("小泽玛利亚",9),new Person("泷泽萝拉",24),
new Person("美惠子",14),new Person("武藤兰",30)
};
Arrays.sort(
persons
);
System.out.println(Arrays.toString(
persons
));
}
}
代码二:核心方法
package com.vice.personsortDemo;
public class Person implements Comparable< Person >{
//
< Person >
当前
/此类的对象名
private String name;
private int age;
public Person(){}
public Person(String name,int age){
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;
}
@Override
public String toString() {
//
toString
方法
return " Person [name=" + name + ",age=" + age + "]";
}
@Override
public int compareTo(Person o) {
//实现:对象之间的比较规则--自己定义规则
//比如 这里我就 就按照年龄来比较了【也可按照name比较 那样字符串的话 是按照
ASCII码 比较的
】
if(o==null){
//比较的对象如果为空的话 我就抛出一个异常【自己可自定义】
throw new NullPointerException();
}
if(this.age<o.age){
// 当前对象 > 参数对象 返回正整数 一般为 1
return -1;
}
if(this.age>o.age){
// 当前对象 < 参数对象 返回负整数 一般为 -1
return 1;
}
return 0;
//当前对象 = 参数对象 返回 0
}
}
-----------------------{:3_67:}
骚年@ 明白了吗?
...................................................
作者:
粺¹³¼畅
时间:
2014-9-3 16:27
谢建平 发表于 2014-9-3 03:16
compareTo()和compare() 是一个方法 comparable 和comparator 是接口
comparable :对实现它的 ...
不错啊!!
作者:
忆梦追风
时间:
2014-9-3 20:18
我表示我也混了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2