集合内部先实现按年龄排序再实现以姓名排序

Posted 沙弥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合内部先实现按年龄排序再实现以姓名排序相关的知识,希望对你有一定的参考价值。

定义一个实体存放需要排序的数据

package ListAscByCollectionsMethod;
/*
 * 定义一个实体,存放数据。
 */
public class User {
     String name;
     String age;
     
     public User(String name,String age){
      this.name=name;
      this.age=age;
     }
     public String getAge() {
      return age;
     }
     public void setAge(String age) {
      this.age = age;
     }
     public String getName() {
      return name;
     }
     public void setName(String name) {
      this.name = name;
     } 

}

实现comparator接口,定义排序规则:

package ListAscByCollectionsMethod;

import java.util.Comparator;
/*
 * 定义一个排序规则
 */
public class ComparatorUser implements Comparator{

    @Override
    public int compare(Object arg0, Object arg1) {
          User user0=(User)arg0;
          User user1=(User)arg1;

           //首先比较年龄,如果年龄相同,则比较名字
          int flag=user0.getAge().compareTo(user1.getAge());
          
          if(flag==0){
           return user0.getName().compareTo(user1.getName());
          }else{
           return flag;
          }  
    }
}

测试定义的排序规则:

package ListAscByCollectionsMethod;

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

public class SortTest {
     public static void main(String[] args){
          List userlist=new ArrayList();
          userlist.add(new User("dd","4"));
          userlist.add(new User("aa","1"));
          userlist.add(new User("ee","5"));
          userlist.add(new User("bb","2"));  
          userlist.add(new User("ff","5"));
          userlist.add(new User("cc","3"));
          userlist.add(new User("gg","6"));
          
          for (int i=0;i<userlist.size();i++){
               User user_temp=(User)userlist.get(i);
                  System.out.print(user_temp.getAge()+"/"+user_temp.getName()+"\t"); 
              }
          System.out.println();
          ComparatorUser comparator=new ComparatorUser();
          Collections.sort(userlist, comparator);
           
          for (int i=0;i<userlist.size();i++){
           User user_temp=(User)userlist.get(i);
              System.out.println(user_temp.getAge()+","+user_temp.getName()); 
          }
          
         }

}

运行:

无排序结果:

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

有排序结果:
1,aa 2,bb 3,cc 4,dd 5,ee 5,ff 6,gg

 

以上是关于集合内部先实现按年龄排序再实现以姓名排序的主要内容,如果未能解决你的问题,请参考以下文章

C语言:输入5个学生的姓名、性别、年龄、成绩,然后按成绩从大到小排序,然后分4列输出结果。

对ArrayList中的Person对象按照先年龄从大到小,相同年龄的再按照姓名(姓名是英文的)的字母顺序进行排序.

TreeSet

怎么在EXCEL表格里按年龄排序

请问怎么在EXCEL表格里按年龄排序?

C#基础第三天-作业-集合-冒泡排序-模拟名片