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

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

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

时间: 2024-08-05 15:24:59

集合内部先实现按年龄排序再实现以姓名排序的相关文章

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

ListDemo2.java ----------------- package com.fs.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /* * Collections可以针对ArrayList存储基本包装类的元素排序,存储自定义对象可不可以排序呢? */ public class Listdemo2 {

查找和排序的基本操作:查找排序算法大集合

重点 查找算法着重掌握:顺序查找.二分查找.哈希表查找.二叉排序树查找. 排序算法着重掌握:冒泡排序.插入排序.归并排序.快速排序. 顺序查找 算法说明 顺序查找适合于存储结构为顺序存储或链接存储的线性表. 算法思想 顺序查找也称为线形查找,属于无序查找算法.从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功:若扫描结束仍没有找到关键字等于k的结点,表示查找失败. 算法实现 int sequenceSearch(int a[], int valu

linq集合内部赋值

linq集合内部赋值 比如将一个列的值,赋值给另一列 有三种方法: 1. e.Result.ToList().ForEach(n => n.IsIntermediarybool = SetIsIntermediary(n.IsIntermediary)); 2.e.Result.Select(n => n.IsIntermediarybool = SetIsIntermediary(n.IsIntermediary)).ToList();//必须是tolist否则的话不好用 3.e.Resul

字典添加一类,删除,按姓名排序,按年龄排序

#define NSLog(FORMAT, ...) fprintf(stderr,"%s\n",[[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]); #import <Foundation/Foundation.h> #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autorele

内部排序(1)——选择排序

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法(比如序列[5, 5,3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面). 选择排序算法步骤如下: 第1步:在未排序的n个数中找到最小数,讲它与a[0]交换. 第2步:在剩下未排序的n-1个数(a[1]~a[n-1])中找到最小数,将它与a[1]交换: -- 第

排序算法总结之希尔排序

一,希尔排序算法介绍 ①希尔排序又称缩小增量排序 ,它本质上是一个插入排序算法.为什么呢? 因为,对于插入排序而言,插入排序是将当前待排序的元素与前面所有的元素比较,而希尔排序是将当前元素与前面增量位置上的元素进行比较,然后,再将该元素插入到合适位置.当一趟希尔排序完成后,处于增量位置上的元素是有序的. ②希尔排序算法的效率依赖于增量的选取 假设增量序列为 h(1),h(2).....h(k),其中h(1)必须为1,且h(1)<h(2)<...h(k) . 第一趟排序时在增量为h(k)的各个元

常见的五类排序算法图解和实现(多关键字排序:基数排序以及各个排序算法的总结)

基数排序思想 完全不同于以前的排序算法,可以说,基数排序也叫做多关键字排序,基数排序是一种借助“多关键字排序”的思想来实现“单关键字排序”的内部排序算法. 两种方式: 1.最高位优先,先按照最高位排成若干子序列,再对子序列按照次高位排序 2.最低位优先:不必分子序列,每次排序全体元素都参与,不比较,而是通过分配+收集的方式. 多关键字排序 例:将下表所示的学生成绩单按数学成绩的等级由高到低排序,数学成绩相同的学生再按英语成绩的高低等级排序.        第一个关键字是数学成绩,第二个关键字是英

详谈排序算法之交换类排序(两种方法实现快速排序【思路一致】)

1.冒泡排序    起泡排序的思想非常简单.首先,将 n 个元素中的第一个和第二个进行比较,如果两个元素的位置为逆序,则交换两个元素的位置:进而比较第二个和第三个元素关键字,如此类推,直到比较第 n-1 个元素和第 n 个元素为止:上述过程描述了起泡排序的第一趟排序过程,在第一趟排序过程中,我们将关键字最大的元素通过交换操作放到了具有 n 个元素的序列的最一个位置上.然后进行第二趟排序,在第二趟排序过程中对元素序列的前 n-1 个元素进行相同操作,其结果是将关键字次大的元素通过交换放到第 n-1

排序算法七:选择排序之堆排序

排序算法七:选择排序之堆排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评>中给出的首个算法就是高效的排序算法.本文将对排序算法做一个全面的梳理,从最简单的"冒泡"到高效的堆排序等. 上博文讲述了选择排序中的简单排序算法,本文介绍的堆排序是树性选择排序,采用堆这个数据结构来辅助排序. 排序相关的的基本概念 排序:将一组杂乱无章的数据按一定的规律顺次排列起来. 数据