comparable 和 comparator 总结
来源:互联网 发布:西门子plc编程电缆驱动 编辑:程序博客网 时间:2024/05/18 02:43
comparable :
让需要进行排序的对象实现Comparable接口,重写其中的compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用
java.util.Arrays.sort()来排序对象数组
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
class Student implements Comparable<Student> {private String name;private int age;private float score;public Student(String name, int age, float score) {this.name = name;this.age = age;this.score = score;}public String toString() {return name +"***"+ age +"***"+ score;}@Overridepublic int compareTo(Student o) {// score是private的,为什么能够直接调用,这是因为在Student类内部if (this.score > o.score)return -1;// 由高到底排序else if (this.score < o.score)return 1;else {if (this.age > o.age)return 1;// 由底到高排序else if (this.age < o.age)return -1;elsereturn 0;}}}public class ComparableTest{public static void main(String[] args) {// TODO Auto-generated method stubStudent stu[] = { new Student("张三", 20, 90.0f), new Student("李四", 22, 90.0f),new Student("王五", 20, 99.0f), new Student("赵六", 22, 100.0f) };
for (Student s : stu) {System.out.println(s);}System.out.println("************");java.util.Arrays.sort(stu);for (Student s : stu) {System.out.println(s);}}}
结果:
张三***20***95.0李四***22***90.0王五***20***99.0赵六***22***100.0************赵六***22***100.0王五***20***99.0张三***20***95.0李四***22***90.0
comparator:public class 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() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
import java.util.Comparator;public class PersonComparator implements Comparator<Person>{@Overridepublic int compare(Person o1, Person o2) {if(o1.getAge()>o2.getAge()){return 1;}else if(o1.getAge()<o2.getAge()){return -1;}return 0;}}
import java.util.Arrays;public class ComparatorTest { public static void main(String[] args) { Person[] persons = { new Person("P1", 50), new Person("P2", 30), new Person("P3", 40) }; System.out.println(Arrays.toString(persons)); Arrays.sort(persons, new PersonComparator()); System.out.println(Arrays.toString(persons)); } }
结果:
[Person [name=P1, age=50], Person [name=P2, age=30], Person [name=P3, age=40]][Person [name=P2, age=30], Person [name=P3, age=40], Person [name=P1, age=50]]
总结:
comparable 和 comparator都是接口
comparable 在类中
comparator 类外类中没有变化
引用别人:comparator是策略模式的一种实现
策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化
引用地址:http://www.blogjava.net/jjshcc/archive/2011/04/12/348132.html
阅读全文
0 0
- comparable 和 comparator 总结
- 关于 Comparable 和 Comparator
- 比较Comparable和Comparator
- comparable 和 Comparator 区别
- Comparable和Comparator
- Comparator和Comparable
- Comparator和Comparable
- Comparable和Comparator
- Comparable 和 Comparator
- Comparator和Comparable比较
- comparable 和 comparator
- Comparator和Comparable
- Comparator和Comparable用法
- comparable和comparator比较
- Comparator和Comparable区别
- Comparable和Comparator
- Comparator和Comparable
- java Comparable和Comparator
- 黑莓,还有多少情怀尚存?
- 读《猜猜我有多爱你》画册
- Day03:cloud_note云笔记项目完成记录--1
- Light up my way ,和美女搭讪的技巧和开场白
- method 详解
- comparable 和 comparator 总结
- ContextMenuItemAttribute
- HTTP协议详解(真的很经典)
- 矢量数据下载【道路路网(公路、铁路)、水系、建筑物轮廓、地名等等】
- solr 总结
- 软件无线电 SDR LTE平台简介---OAI、srsLTE、OpenLTE与Amarisoft
- Android 版本更新,安装
- Invalid argument supplied for foreach()
- for ... of循环和for ... in循环的区别