List集合对象中按照不同属性大小排序的实例
实例如下:
packagecom.huad.luck;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.Comparator;
importjava.util.List;
publicclassTest{
publicstaticvoidmain(String[]args){
Personp=newPerson();
p.setName("tom");
p.setAge(11);
Personp1=newPerson();
p1.setName("lilei");
p1.setAge(19);
Personp2=newPerson();
p2.setName("json");
p2.setAge(15);
Listlist=newArrayList();
list.add(p);
list.add(p1);
list.add(p2);
Collections.sort(list,newComparator(){
//这里可以再Person中实现Comparator接口,重写compare方法
@Override
publicintcompare(Persono1,Persono2){
//这里按照名字排序
returno1.getName().compareTo(o2.getName());
//这里按照age排序
//return(o1.getAge()+"").compareTo(o2.getAge()+"");
//。。。根据不同属性值排序
}
});
for(inti=0;i用collection.sort()方法对list集合排序第一种是list中的对象实现Comparable接口,如下:/**
*根据order对User排序
*/
publicclassUserimplementsComparable{
privateStringname;
privateIntegerorder;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicIntegergetOrder(){
returnorder;
}
publicvoidsetOrder(Integerorder){
this.order=order;
}
publicintcompareTo(Userarg0){
returnthis.getOrder().compareTo(arg0.getOrder());
}
}
测试一下:
publicclassTest{
publicstaticvoidmain(String[]args){
Useruser1=newUser();
user1.setName("a");
user1.setOrder(1);
Useruser2=newUser();
user2.setName("b");
user2.setOrder(2);
Listlist=newArrayList();
//此处adduser2再adduser1
list.add(user2);
list.add(user1);
Collections.sort(list);
for(Useru:list){
System.out.println(u.getName());
}
}
}
输出结果如下
a
b
第二种方法是根据Collections.sort重载方法来实现,例如:
/**
*根据order对User排序
*/
publicclassUser{//此处无需实现Comparable接口
privateStringname;
privateIntegerorder;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicIntegergetOrder(){
returnorder;
}
publicvoidsetOrder(Integerorder){
this.order=order;
}
}
主类中这样写即可:
publicclassTest{
publicstaticvoidmain(String[]args){
Useruser1=newUser();
user1.setName("a");
user1.setOrder(1);
Useruser2=newUser();
user2.setName("b");
user2.setOrder(2);
Listlist=newArrayList();
list.add(user2);
list.add(user1);
Collections.sort(list,newComparator(){
publicintcompare(Userarg0,Userarg1){
returnarg0.getOrder().compareTo(arg1.getOrder());
}
});
for(Useru:list){
System.out.println(u.getName());
}
}
}
输出结果如下
a
b
前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁
多字段的场合:
Collections.sort(list,new Comparator(){ public int compare(User arg0, User arg1) { // 第一次比较专业 int i = arg0.getOrder().compareTo(arg1.getOrder()); // 如果专业相同则进行第二次比较 if(i==0){ // 第二次比较 int j=arg0.getXXX().compareTo(arg1.getXXX()); // 如果学制相同则返回按年龄排序 if(j==0){ return arg0.getCCC().compareTo(arg1.getCCC()); } return j; } return i; } });
以下是另外一个例子
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList() ;
arrayList.add(new Exmployee("zengqiang",new Integer(5000))) ;
arrayList.add(new Exmployee("zengmin",new Integer(4000))) ;
arrayList.add(new Exmployee("liuxiaojuan",new Integer(4200))) ;
arrayList.add(new Exmployee("giuming",new Integer(2200))) ;
Collections.sort(arrayList, new Comparator(){
public int compare(Exmployee arg0, Exmployee arg1) {
return arg1.getSalary()-arg0.getSalary() ; //按照工资升序
//return arg0.getSalary()-arg1.getSalary() ; 按照工资降序
//return arg0.getName().compareTo(arg1.getName()) ; 按照姓名升序
}
});
for(Exmployee e:arrayList)
System.out.println(e.getName()+"'s salary is "+e.getSalary()) ;
}
}
class Exmployee {
public Exmployee(String name, int salary) {
this.name = name ;
this.salary = salary ;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
private int salary;
}
以上这篇List集合对象中按照不同属性大小排序的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。