需求:对集合中的数据按某种方式进行排序输出,比如集合中存储的对象是Person,现在按person的年龄从大到小输出,首先使用List集合进行存储,在java中如果要进行对对象进行比较的话,则实现Comparable接口,现在看看Comparable接口文档中怎么描述
接口 Comparable<T>
类型参数:T
- 可以与此对象进行比较的那些对象的类型-
实现Comparable接口必须实现CompareTo(T o)
-
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
- 现在进行代码测试
- Person.java
public class Person implements Comparable<Person>{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(int age, String name) {
super();
this.age = age;
this.name = name;
}
@Override
public int compareTo(Person o) {
if(this.age>o.age){
return 1;
}else if(this.age<o.age){
return -1;
}
return 0;
}
}
PersonTest.java
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person(24,"zhangsan");
Person p2 = new Person(25,"zhangsan1");
Person p3 = new Person(23,"zhangsan2");
Person p4 = new Person(22,"zhangsan3");
List<Person> persons = new ArrayList<Person>();
persons.add(p2);
persons.add(p1);
persons.add(p4);
persons.add(p3);
for(int i=0;i<persons.size();i++){
Person p = persons.get(i);
System.out.println(p.getName()+"::::::"+p.getAge());
}
}
}
打印结果:
zhangsan1::::::25
zhangsan::::::24
zhangsan3::::::22
zhangsan2::::::23
- 通过打印的结果发现集合中的数据并没有按照年龄进行排序,那是因为List集合内部并没有实现排序,如果还要按年龄输出,必须对集合进行排序
-
Collections.sort(list);
- 则可以实现
- 如果使用TreeSet集合就可以对他进行排序,因为TreeSet集合内部实现了对对象的排序
-
T
- 可以与此对象进行比较的那些对象的类型实现Comparable接口必须实现CompareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
public class Person implements Comparable<Person>{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(int age, String name) {
super();
this.age = age;
this.name = name;
}
@Override
public int compareTo(Person o) {
if(this.age>o.age){
return 1;
}else if(this.age<o.age){
return -1;
}
return 0;
}
}
PersonTest.java
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person(24,"zhangsan");
Person p2 = new Person(25,"zhangsan1");
Person p3 = new Person(23,"zhangsan2");
Person p4 = new Person(22,"zhangsan3");
List<Person> persons = new ArrayList<Person>();
persons.add(p2);
persons.add(p1);
persons.add(p4);
persons.add(p3);
for(int i=0;i<persons.size();i++){
Person p = persons.get(i);
System.out.println(p.getName()+"::::::"+p.getAge());
}
}
}
打印结果:
zhangsan1::::::25
zhangsan::::::24
zhangsan3::::::22
zhangsan2::::::23
Collections.sort(list);