黑马程序员技术交流社区
标题:
新手,求总结comper系列
[打印本页]
作者:
严海荣
时间:
2012-9-19 13:36
标题:
新手,求总结comper系列
本帖最后由 严海荣 于 2012-9-19 21:29 编辑
compare ,compareTo,Comperable, Comparator 这些都是怎么用的??
好复杂啊~~:Q
作者:
赵宇
时间:
2012-9-19 13:53
public int compareTo(String anotherString)按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象在参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只有在方法 equals(Object) 返回 true 时才返回 0。
Comparable:
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator:
Comparator可以看成一种算法的实现,将算法和数据分离。
Comparator也可以在下面两种环境下使用:
类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身;
可以使用多种排序标准,比如升序、降序等。
作者:
王自强
时间:
2012-9-19 16:07
TreeSet排序的有两种比较方法
第一种方式:让元素自身具备比较性。
步骤 1,集合中的元素类 implements Comparable接口,
2,覆盖public int compareTo(Object obj)方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
例如:
1,class Student implements Comparable<Student>//(第一种方式)该接口强制让学生(集合中的元素)具备比较性。
{
private String name;
private int age;
Student(String name,int age)
{
this.name = name;
this.age = age;
}
2,public int compareTo(Student s)//******必须做*******
{
int num = this.getAge()-s.getAge();
if(num == 0)
return this.getName().compareTo(s.getName());
return num;
}
}
TreeSet<Student> ts = new TreeSet();//第一种实现元素比较性的方式!
第二种方式:传入一个比较器
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
步骤 1,class MyCompare implements Comparator//定义的比较器
2,public int compare(Object o1,Object o2)//需要实现的方法
3,初始化时TreeSet ts = new TreeSet(new MyCompare());
例如:
1,class MyCompare implements Comparator<Student>//第二种实现元素比较性的方式=自定义的比较器。
{
2,public int compare(Student s1,Student s2)//********必须复写************
{
//Student s1 = (Student)o1;//将元素向下转型!-----------------
//Student s2 = (Student)o2;//
int num = s1.name.compareTo(s2.name);
if(num == 0)
return (s1.age-s2.age);
return num;
}
}
3,TreeSet<Student> ts = new TreeSet(new MyCompare());//第二种方式!用比较器的方法比较。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2