List集合正向和逆向排序

假设List集合中存放了User这个对象:

package com.user.controller;

class User {
	 String name;
	 //此处定义引用变量必须是Object类型,不能是基本类型,否则无法调用compareTo()方法进行比较排序
	 //注意:String并不是基本数据类型例如:String a = new String()可以  int a = new int();可以么?
	 Integer age;
	 
	 public User(String name,Integer age){
	  this.name=name;
	  this.age=age;
	 }
	 public Integer getAge() {
	  return age;
	 }
	 public void setAge(Integer age) {
	  this.age = age;
	 }
	 public String getName() {
	  return name;
	 }
	 public void setName(String name) {
	  this.name = name;
	 } 
	}

测试:排序

package com.user.controller;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortTest {

	public static void main(String[] args){
	  List<User> userlist=new ArrayList<User>();
	  userlist.add(new User("dd",4));
	  userlist.add(new User("aa",1));
	  userlist.add(new User("ff",5));
	  userlist.add(new User("bb",2));  
	  userlist.add(new User("ee",5));
	  userlist.add(new User("cc",3));
	  userlist.add(new User("gg",6));
	  /**
	   * sort方法解释如下:
	   * userlist:需要比较的集合
	   * new Comparator<User>():实现来自Comparator接口的比较器,new Comparator<User>(){}相当匿名内部类,相当于下文中的代码
	   */
	  Collections.sort(userlist, new Comparator<User>(){
		  public int compare(User arg0, User arg1){
			  /**
			   *   首先比较年龄,如果年龄相同,则比较名字
			   *   此处对集合中的对象根据你说定义的属性进行比较,
			   *   flag=0:值相同
			   *   flag>0:如过比较的参数是数字,则证明前arg0.getAge()>arg1.getAge()
			   *   反之:arg0.getAge()>arg1.getAge()
			   *   此方法同样适用于String、Date等类型数据
			   * 
			   */
			  int flag=arg0.getAge().compareTo(arg1.getAge());//从小到大
 			//int flag=arg1.getAge().compareTo(arg0.getAge());//从大到小
			  if(flag==0){
			   return arg0.getName().compareTo(arg1.getName());
			  }else{
			   return flag;
			  }  
		 }});
	  for (int i=0;i<userlist.size();i++){
	   User user_temp=(User)userlist.get(i);
	      System.out.println(user_temp.getAge()+","+user_temp.getName()); 
	  }
	  
	 }
	}

上文中的比较器的写法相当于:

package com.user.controller;
import java.util.Comparator;

public class ComparatorUser implements Comparator<User>{
	 public int compare(User arg0, User arg1){
		   //首先比较年龄,如果年龄相同,则比较名字
		  int flag=arg0.getAge().compareTo(arg1.getAge());
		  if(flag==0){
		   return arg0.getName().compareTo(arg1.getName());
		  }else{
		   return flag;
		  }  
	 }
}

现在进行正向和逆向的测试:
正向(从小到大):

1,aa
2,bb
3,cc
4,dd
5,ee
5,ff
6,gg

逆向(从大到小):

6,gg
5,ee
5,ff
4,dd
3,cc
2,bb
1,aa





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值