自己做网站要不要钱/广州推广服务
在进行软件构造实验三的过程中,遇到了对List集合按照对象的某一属性排序的问题,我们知道,在一般的情况下,java中提供了对集合进行操作的工具类Collections,
Collections能够对集合中的元素用默认的排序方法sort来根据元素的自然顺序对指定集合按升序进行排序。
- 对于常用的java自带的类:
在java中,很多类自己实现好了Comparable接口,并且重写了comepareTo方法,所以我们可以直接调用方法就可以实现排序。我们拿Integer类来举例子:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class Test{public static void main(String[] args) {//创建List<Integer> list = new ArrayList<Integer>();list.add(9);list.add(2);list.add(5);list.add(1);System.out.println(list);//排序Collections.sort(list);System.out.println(list);}
}
输出结果
[9 2 5 1][1 2 5 9]
2.对于自定义的类,按照类中某种属性就行排序,有两种方法:
方法一:
在我们自定义的类实现Comparable接口,并在类中重写public int compareTo(T o)方法。我们这个例子中对Entity集合按照Entuty里面的的age进行排序如下所示:
public class Test
{public static void main(String[] args) {ArrayList<Entity> list=new ArrayList<Entity>();list.add(new Entity("余涛",24));list.add(new Entity("王宁",13));list.add(new Entity("崔同发",25));System.out.println("排序前:"+list);Collections.sort(list);System.out.println("排序后:"+list);}
}
class Entity implements Comparable<Entity>
{String name;int age;public Entity(String name, int age) {super();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;}@Overridepublic String toString() {return "Entity [name=" + name + ", age=" + age + "]";}@Overridepublic int compareTo(Entity o) {if(this.getAge()>o.getAge()){return 1;}else if(this.getAge()<o.getAge()){return -1;}else{return 0;}}
}
为了对Entity这个类按照age的属性值从小到大排序,则让Entity这个类实现Comparable接口,并编写public int compareTo(Entity o) 方法。这样使用Collections.sort(list);就可以对list中的对象进行按照age大小排序。
根据>和<的情况返回的是1还是-1可以实现从大到小排序或者从小到大排序。
输出结果:
排序前:[Entity [name=余涛, age=24], Entity [name=王宁, age=13], Entity [name=崔同发, age=25]]
排序后:[Entity [name=王宁, age=13], Entity [name=余涛, age=24], Entity [name=崔同发, age=25]]
方法二:
在排序的时候,给sort()方法传入一个比较器。传入一个实现比较器接口的匿名内部类,告诉sort()方法按照比较器来对list中的对象进行排序。如下所示:
public class Test
{public static void main(String[] args) {ArrayList<Entity> list=new ArrayList<Entity>();list.add(new Entity("余涛",24));list.add(new Entity("王宁",13));list.add(new Entity("崔同发",25));System.out.println("排序前:"+list);Collections.sort(list,new Comparator<Entity>() {@Overridepublic int compare(Entity o1, Entity o2) {if(o1.getAge()>o2.getAge()){return 1;}else if(o1.getAge()<o2.getAge()){return -1;}else{return 0;}}});System.out.println("排序后:"+list);}
}
class Entity
{String name;int age;public Entity(String name, int age) {super();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;}@Overridepublic String toString() {return "Entity [name=" + name + ", age=" + age + "]";}
}
输出结果:
排序前:[Entity [name=余涛, age=24], Entity [name=王宁, age=13], Entity [name=崔同发, age=25]]
排序后:[Entity [name=王宁, age=13], Entity [name=余涛, age=24], Entity [name=崔同发, age=25]]
以上便是对List集合按照对象的某一属性排序的方法。
参考文章