自学Java,第一次使用csdn记录自己的学习记录,一来可以帮助自己整理知识内容,二来希望能够为新的学习者提供一点点参考,如有不当之处,还望指正。
主要内容:
1、Comparable使用
2、Comparator使用
3、注意事项
1、Comparable使用
Comparable是Java中一个接口,当类实现该接口之后可以进行排序操作。
该接口仅有一个函数:
public int compareTo(Object o)
类只需要实现该函数即可进行排序。
代码如下:
package com.thinkinjava.thread.comparator;
import java.util.Arrays;
public class PersonComparable implements Comparable<PersonComparable>{
private String name;
private int age;
public PersonComparable(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 int compareTo(PersonComparable o) {
return this.getAge()-o.getAge();
}
@Override
public String toString() {
return "PersonComparable{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public static void main(String[] args) {
PersonComparable[] person=new PersonComparable[]{new PersonComparable("zhangsan",12),new PersonComparable("lisi",8),new PersonComparable("wangwu",30),new PersonComparable("zhaosi",80)};
System.out.println("before sorting");
for(PersonComparable person1:person){
System.out.println(person1);
}
Arrays.sort(person);
System.out.println("after sorting");
for(PersonComparable person1:person){
System.out.println(person1);
}
}
}
运行结果为:
before sorting
PersonComparable{name='zhangsan', age=12}
PersonComparable{name='lisi', age=8}
PersonComparable{name='wangwu', age=30}
PersonComparable{name='zhaosi', age=80}
after sorting
PersonComparable{name='lisi', age=8}
PersonComparable{name='zhangsan', age=12}
PersonComparable{name='wangwu', age=30}
PersonComparable{name='zhaosi', age=80}
2、Comparator使用
Comparator也是一个接口,和Comparable类似,该接口同样只有一个函数:
public int compare(Object o1, Object o2)
首先创建一个Person类:
package com.thinkinjava.thread.comparator;
public class Person{
private String name;
private int age;
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 +
'}';
}
}
然后创建PersonComparator:
package com.thinkinjava.thread.comparator;
import java.util.Comparator;
public class PersonComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.getAge()-o2.getAge();
}
}
最后建立测试类:
package com.thinkinjava.thread.comparator;
import java.util.Arrays;
public class TestPerson {
public static void main(String[] args) {
Person[] person=new Person[]{new Person("zhangsan",12),new Person("lisi",8),new Person("wangwu",30),new Person("zhaosi",80)};
System.out.println("before sorting");
for(Person person1:person){
System.out.println(person1);
}
Arrays.sort(person,new PersonComparator());
System.out.println("after sorting");
for(Person person1:person){
System.out.println(person1);
}
}
}
运行结果为:
before sorting
Person{name='zhangsan', age=12}
Person{name='lisi', age=8}
Person{name='wangwu', age=30}
Person{name='zhaosi', age=80}
after sorting
Person{name='lisi', age=8}
Person{name='zhangsan', age=12}
Person{name='wangwu', age=30}
Person{name='zhaosi', age=80}
3、注意事项
以上实例当中,对于新手需要注意以下几点:
1)实现Comparable和Comparator时需要注意,该接口采用泛型,因此需要添加上参数Comparable<PersonComparable>;
2)为了方便输出结果,通常对一个类的toString进行重写,这一点建议可以在几乎所有的类当中尝试;
3)Arrays.sort()针对Comparable和Comparator二者的比较参数不一样,实现Comparable后只需要personcomparable参数即可,而实现comparator则需要person和personcomparator。