List<T> 排序

在使用List集合时,通常情况下希望从集合中得到的对象是按照一定顺序排列的,但是List集合的默认排序方式为按照对象的插入顺序,可以通过java.util.Collections类的静态方法sort(List<T>list)、sort(List<T> list,Comparator<? super T>c)或reverse(List<?>list)对集合中的对象进行客户化排序,其中方法sort(List<T>list)和reverse(List<?>list)要求集合中的对象必须实现java.lang.Comparable接口,即实现方法compareTo(),该方法的具体定义如下:
public int compareTo(T o);
方法sort(List<T>list)是将集合中的所有对象按正序排列,方法reverse(List<?>list)是将集合中的所有对象按倒序排列;方法sort(List<T>list, Comparator<? super T>c)不要求集合中的对象必须实现Comparable接口,但是在使用该方法时需要显式设置比较器,即该方法的第二个入口参数,比较器必须实现java.util.Comparator接口,即实现方法compare(),该方法的具体定义如下:
int compare(T o1, T o2);
比较器的功能是实现对集合中所有对象的排序策略。
下面将通过两个例子,分别介绍通过实现不同接口,实现对List集合进行客户化排序的方法。
注意:
这里讲的对List集合进行客户化排序的前提条件是List集合中的元素为同一类型!
1.通过实现java.lang.Comparable接口实现客户化排序
首先新建一个Person类,该类必须实现java.lang.Comparable接口,即实现compareTo(Objecto)方法,这里按姓名排序,排序方式为按照汉字的全拼,在比较两个字符串的大小时,如果两个字符串相等则返回0,如果被比较的字符串大于比较的字符串,则返回正数,如果被比较的字符串小于比较的字符串,则返回负数,完整代码如下:
src\com\mwq\Person.java关键代码:
public class Person implements Comparable {
private String name;
private long id_card;
public int compareTo(Object o) {// 实现Comparator接口的方法
Person p = (Person) o;
String s1 = CnToSpell.getFullSpell(this.name);// 获得汉字的全拼
String s2 = CnToSpell.getFullSpell(p.getName());// 获得汉字的全拼
return s1.compareTo(s2);// 比较两个字符串的大小
}
public long getId_card() {
return id_card;
}
public void setId_card(long id_card) {
this.id_card = id_card;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后再编写一个用来测试的main()方法,分别在排序前后遍历List集合,完整代码如下:
src\com\mwq\TestCollection.java关键代码:
public static void main(String[] args) {
List<Person> list = newArrayList<Person>();
String names[] = { "马先生", "王小姐", "李先生" };
long id_cards[] = { 220181, 220193, 220186 };
for (int i = 0; i < names.length; i++) {//初始化List集合
Person person = new Person();
person.setName(names[i]);
person.setId_card(id_cards[i]);
list.add(person);
}
System.out.println("排序前:");
for (int i = 0; i < list.size(); i++) {//遍历List集合
Person person = list.get(i);
System.out.println("------ " + person.getName() +" 
" + person.getId_card());
}
// 利用java.util.Collections类的sort(List list)或reverse(Listlist)方法对List集合排序
Collections.sort(list); 
              // 按升序排列
// 
    Collections.reverse(list);          // 按降序排列
System.out.println("排序后:");
……// 由于篇幅有限,此处省略了用来遍历List集合的代码
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值