`
fcdxdx
  • 浏览: 14731 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

List的排序算法

    博客分类:
  • java
阅读更多

最近在一个项目中遇到需要将一个list集合根据时间进行排序的情况,于是,写出了以下方法,为了便于展示方法,我们首先建一个实体类

 

package test;

import java.util.Date;

public class User {
	private int userid;
	private String username;
	private Date BirthDatestr;
	private int num;
	public int getUserid() {
		return userid;
	}
	public void setUserid(int userid) {
		this.userid = userid;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public Date getBirthDatestr() {
		return BirthDatestr;
	}
	public void setBirthDatestr(Date birthDatestr) {
		BirthDatestr = birthDatestr;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public UserInfo(int userid, String username, Date birthDatestr, int num) {
		super();
		this.userid = userid;
		this.username = username;
		BirthDatestr = birthDatestr;
		this.num = num;
	}
	
}

 

之后是排序方法

import java.lang.reflect.InvocationTargetException;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.lang.reflect.Method;

public class SortList<E>{   
    public void Sort(List<E> list, final String method, final String sort){  
        Collections.sort(list, new Comparator() {             
            public int compare(Object a, Object b) {  
                int ret = 0;  
                try{  
                    Method m1 = ((E)a).getClass().getMethod(method, null);  
                    Method m2 = ((E)b).getClass().getMethod(method, null);  
                    if(sort != null && "desc".equals(sort))//倒序  
                        ret = m2.invoke(((E)b), null).toString().compareTo(m1.invoke(((E)a), null).toString());   
                    else//正序  
                        ret = m1.invoke(((E)a), null).toString().compareTo(m2.invoke(((E)b), null).toString());  
                }catch(NoSuchMethodException ne){  
                    System.out.println(ne);  
                }catch(IllegalAccessException ie){  
                    System.out.println(ie);  
                }catch(InvocationTargetException it){  
                    System.out.println(it);  
                }  
                return ret;  
            }  
         });  
    }  
}  

 接下来我们测试一下方法的正确性

import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;


import com.haibo.manage.model.HistoryCount;

import net.sf.json.JSONArray;

public class WangTest {
	public static void main(String[] args) throws ParseException {
		 List<UserInfo> list = new ArrayList<UserInfo>();  
         
	        SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");  
	          
	        list.add(new UserInfo(3,"b",formater.parse("1980-12-01"),11));  
	        list.add(new UserInfo(1,"c",formater.parse("1980-10-01"),30));  
	        list.add(new UserInfo(2,"a",formater.parse("1973-10-01"),11));  
	                      
	        System.out.println("-------原来序列-------------------");  
	        for(UserInfo user : list){  
	            System.out.println(user.toString());  
	        }         
	          
	        //调用排序通用类  
	        SortList<UserInfo> sortList = new SortList<UserInfo>();  
	          
	        //按userId排序  
	        sortList.Sort(list, "getUserid", "desc");  
	        System.out.println("--------按userId倒序------------------");  
	        for(UserInfo user : list){  
	            System.out.println(user.getUserid());  
	        }  
	          
	        //按username排序  
	        sortList.Sort(list, "getUsername", null);  
	        System.out.println("---------按username排序-----------------");          
	        for(UserInfo user : list){  
	            System.out.println(user.getUsername());  
	        }  
	          
	        //按birthDate排序  
	        sortList.Sort(list, "getBirthDatestr", null);  
	        System.out.println("---------按birthDate排序-----------------");         
	        for(UserInfo user : list){  
	            System.out.println(user.getBirthDatestr());  
	        }  
	}
}
 
分享到:
评论

相关推荐

    java常见八种排序算法

    在编程领域,排序算法是计算机科学的基础之一,尤其是在Java这样的高级编程语言中。排序算法用于组织数据,使得数据按照特定顺序排列,这对于数据分析、数据库管理等应用至关重要。本篇文章将详细探讨Java中常见的八...

    插入,选择排序的链表实现及快速,希尔,冒泡排序算法实现合集

    在IT领域,排序算法是计算机科学中的核心概念,特别是在数据结构和算法分析中。这里我们主要探讨的是五种不同的排序算法:插入排序、选择排序、快速排序、希尔排序以及冒泡排序,它们都有对应的链表实现。让我们逐一...

    C#实现所有经典排序算法

    C#实现所有经典排序算法 本文将对C#实现的所有经典排序算法进行详细的讲解和分析,从选择排序、冒泡排序、快速排序等开始,讲解每种排序算法的原理、优缺点、实现代码和时间复杂度等方面。 一、选择排序 选择排序...

    单链表上的简单选择排序算法

    在计算机科学中,排序算法是数据结构领域的重要组成部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序(如升序或降序)排列。简单选择排序是一种基础且直观的排序算法,虽然效率较低,但对理解排序原理...

    最快的排序算法 java最快的排序-在Java中对列表进行排序的最快方法,排序算法数据结构

    排序算法在 Java 中的应用 Java 中的排序算法是指对列表中的元素进行排序的方法。常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。每种排序算法都有其优缺点,选择合适的排序算法取...

    四种算法实现排序

    这里我们将详细讨论四种常见的排序算法:冒泡排序、简单选择排序、归并排序和堆排序,以及它们在C#语言中的实现。 1. **冒泡排序**: 冒泡排序是一种简单的交换排序,它通过不断比较相邻元素并交换位置来逐步排序...

    c#各种排序算法动态图形演示-数据结构经典算法动态演示

    在C#中,可以使用内置的`Array.Sort()`或`List&lt;T&gt;.Sort()`方法,它们内部使用了高效的排序算法,如TimSort(一种混合了插入排序、归并排序和双路插入排序的稳定排序算法),但在需要自定义排序规则或者理解算法工作...

    8种基本排序算法2015上

    根据提供的信息,我们可以总结出以下关于八种基本排序算法中的两种——冒泡排序(Bubble Sort)与插入排序(Insert Sort)的知识点。 ### 冒泡排序(Bubble Sort) #### 定义 冒泡排序是一种简单的排序算法。它...

    基数排序算法 java实现

    基数排序是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种算法对于大数据量的排序尤其有效,因为其时间复杂度为线性,即O(n*k),其中n是待排序的元素数量,k是每...

    java List 排序 Collections.sort

    在`Collections.sort()`内部,使用了一种称为“快速排序”的高效排序算法。快速排序是一种分治策略,通过选择一个基准值,将数组分为两部分,左边的元素都小于基准,右边的元素都大于基准,然后再对左右两部分递归地...

    几种排序算法的代码实现

    根据给定文件中的标题、描述、标签以及部分内容,我们可以总结出以下关于几种排序算法的知识点,特别是关于希尔排序的相关细节。 ### 几种排序算法的代码实现 #### 1. **希尔排序** - **定义与原理**:希尔排序是...

    用C#实现的排序算法

    根据提供的文件信息,我们可以深入探讨在C#中实现的不同类型的排序算法。这些排序算法包括选择排序、冒泡排序、快速排序、插入排序以及希尔排序。接下来将逐一介绍这些排序算法的具体实现及其工作原理。 ### 1. ...

    八大排序算法整理

    ### 八大排序算法整理 #### 一、冒泡排序(交换排序) **基本思想**: 冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地...

    c#实现所有经典排序算法

    根据给定的信息,本文将详细解释C#语言中几种经典的排序算法实现,包括选择排序(Selection Sort)、冒泡排序(Bubble Sort)、快速排序(Quick Sort)、插入排序(Insertion Sort)以及希尔排序(Shell Sort)。...

    python ip地址排序算法2.0

    在这个"python ip地址排序算法2.0"中,开发者显然已经对原始的排序算法进行了优化,旨在提高效率并支持更复杂的排序需求,比如按IP地址的分组进行排序。这个更新的算法利用了Python中的map函数、lambda表达式以及...

    八大排序算法的python实现

    八大排序算法是计算机科学中对数据进行排序的八种经典算法,它们在计算机程序设计和算法分析中有着广泛应用。在Python中实现这些排序算法不仅能帮助我们理解排序原理,同时还能提升我们的编程能力。下面,我们一一...

    基于链表实现的排序算法以及性能分析

    "基于链表实现的排序算法以及性能分析" 本文主要围绕链表实现的排序算法展开讨论,涵盖了选择排序、插入排序、冒泡排序、快速排序和归并排序等多种常见排序算法,并对这些算法的性能进行了分析和对比。 选择排序 ...

    c#+排序算法大全+经典算法

    在编程领域,排序算法是计算机科学中的核心概念,尤其是在C#这样的高级编程语言中。排序算法是用来组织数据,使其按照特定顺序排列的算法。本资料包"**c#+排序算法大全+经典算法**"显然是一个关于C#实现各种排序算法...

    简单的排序算法

    本次解析的是一个基于C语言实现的简单排序算法,主要关注于如何在列表视图(List View)中对项目进行排序,特别适用于Windows应用程序开发环境。 ### 排序算法简介 排序算法是用于将一组无序的数据按照特定的顺序...

    c# 排序算法大全 经典算法

    在编程领域,排序算法是计算机科学中的核心概念,它们用于组织和优化数据处理。C#是一种广泛使用的面向对象的编程语言,它提供了多种方法来实现排序。本篇将深入探讨C#中的排序算法,以及如何在Visual Studio 2005...

Global site tag (gtag.js) - Google Analytics