java中对List排序

java中可以通过Collectioins的sort方法对List进行排序,首先看API中的两种重载的方法:

  1. public static <T extends Comparable<? super T>> void sort(List<T> list)
    说明:根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是可相互比较的(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。此排序方法具有稳定性:不会因调用 sort 方法而对相等的元素进行重新排序。指定列表必须是可修改的,但不必是大小可调整的。
    该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n) 性能。 此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生的 n2 log(n) 性能。

    参数:
    list - 要排序的列表。
    抛出:
    ClassCastException - 如果列表包含不可相互比较 的元素(例如,字符串和整数)。
    UnsupportedOperationException - 如果指定列表的列表迭代器不支持 set 操作。

  2. public static <T> void sort(List<T> list,
    Comparator<? super T> c)

    参数:
    list - 要排序的列表。
    c - 确定列表顺序的比较器。null 值指示应该使用元素的自然顺序。
    其他同上

用法:
List中所放实体实现Comparable接口;
实现按照age由小到大排序,age相同时安照level排序

package listSortTest;

public class Persion implements Comparable<Persion>{

    private String name;
    private int age;

    public Persion(String name, int age, int level) {
        super();
        this.name = name;
        this.age = age;
        this.level = level;
    }

    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public int getLevel() {
        return level;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setLevel(int level) {
        this.level = level;
    }
    private int level;

    @Override
    public int compareTo(Persion p) {
        if(this.age > p.age){
            return 1;
        }
        else if(this.age < p.age){
            return -1;
        }
        else{
            //return 0;  //age相同时按照level排序
            if(this.level > p.level){
                return 1;
            }
            else if(this.level < p.level){
                return -1;
            }
            else {
                return 0;
            }
        }
    }

    @Override
    public String toString() {
        return this.name +"  "+ this.age +"  "+this.level;
    }


}
测试类:

package listSortTest;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ListSortTest {

public static void main(String[] args) {
    Persion p1 = new Persion("qwe", 20, 5);
    Persion p2 = new Persion("asd", 12, 3);
    Persion p3 = new Persion("zxc", 22, 2);
    Persion p4 = new Persion("qaz",20,1);

    List<Persion> ps = new ArrayList<Persion>();
    ps.add(p1);
    ps.add(p2);
    ps.add(p3);
    ps.add(p4);

    Collections.sort(ps);

    for(Persion p : ps){
        System.out.println(p);
    }

}

}

**传入确定列表顺序的比较器**

package ListSortTest2;

public class Persion{

private String name;
private int age;

public Persion(String name, int age, int level) {
    super();
    this.name = name;
    this.age = age;
    this.level = level;
}

public String getName() {
    return name;
}
public int getAge() {
    return age;
}
public int getLevel() {
    return level;
}
public void setName(String name) {
    this.name = name;
}
public void setAge(int age) {
    this.age = age;
}
public void setLevel(int level) {
    this.level = level;
}
private int level;

@Override
public String toString() {
    return this.name +"  "+ this.age +"  "+this.level;
}

}

测试类:

package ListSortTest2;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class ListSortTest {

public static void main(String[] args) {
    Persion p1 = new Persion("qwe", 20, 5);
    Persion p2 = new Persion("asd", 12, 3);
    Persion p3 = new Persion("zxc", 22, 2);
    Persion p4 = new Persion("qaz",20,1);

    List<Persion> ps = new ArrayList<Persion>();
    ps.add(p1);
    ps.add(p2);
    ps.add(p3);
    ps.add(p4);

    Collections.sort(ps,new Comparator<Persion>() {

        @Override
        public int compare(Persion o1, Persion o2) {
            if(o1.getAge() > o2.getAge()){
                return 1;
            }
            else if(o1.getAge() < o2.getAge()){
                return -1;
            }
            else{
                return 0;
            }   
        }

    });

    for(Persion p : ps){
        System.out.println(p);
    }

}

}

“`

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值