`
CrackRen
  • 浏览: 170378 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

列表和数组的排序实现

    博客分类:
  • Java
阅读更多

我们经常需要对列表或者数组进行排序,如果每次都自己写算法实现是很麻烦的,也是没必要的,Java本身自带了一个排序方法,可以对指定的列表或数组进行排序,而我们所要做的就是,编写排序规则.

 

 

实现 比较接口(排序规则)

 

java.util.Comparator<T>
int compare (T o1, T o2)
Compares its two arguments for order.

 

 

 


 

例如下面的类和排序规则:

package test.Java;

import java.util.Comparator;

/**
 * Member 类
 * @author Ren.xia
 *
 */
class Member {
	int nID = 0;
	int nAge = 0;

	public Member(int nID, int nAge) {
		// TODO Auto-generated constructor stub
		this.nID = nID;
		this.nAge = nAge;
	}
}

/**
 * 对Member排序的规则类
 * 	对ID上升排序
 * @author Ren.xia
 *
 */
class SortByID implements Comparator<Member> {
	//排序
	public int compare(Member o1, Member o2) {
		return (o1.nID - o2.nID);
	}
}

/**
 * 对Member排序的规则类
 * 	对Age上升排序
 * @author Ren.xia
 *
 */
class SortByAge implements Comparator<Member> {
	//排序
	public int compare(Member o1, Member o2) {
		return (o1.nAge - o2.nAge);	
	}
}
 

 

对列表进行排序

java.lang.Object

extended by java.util.Collections

 

static <T extends Comparable <? super T>> void

sort (List <T> list)

根据指定比较器产生的顺序对指定对象数组进行排序。

static <T> void

sort (List <T> list, Comparator <? super T> c)

根据指定比较器产生的顺序对指定对象数组进行排序。

 

package test.Java;

import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;

public class JavaTest {
	
	public static void main(String[] args) {
		
		List<Member> memberList = new ArrayList<Member>();
		
		memberList.add(new Member(0, 23));
		memberList.add(new Member(1, 27));
		memberList.add(new Member(2, 24));
		memberList.add(new Member(3, 22));
		
		//对列表 进行年龄升序排序并输出
		java.util.Collections.sort(memberList, new SortByAge());
		for (int i = 0; i < memberList.size(); i++) {
			System.out.printf("No.%d : (ID:%d, Age:%d)\n", i, memberList.get(i).nID, memberList.get(i).nAge);
		}
		
		//对列表 进行ID升序排序并输出
		java.util.Collections.sort(memberList, new SortByID());
		for (int i = 0; i < memberList.size(); i++) {
			System.out.printf("No.%d : (ID:%d, Age:%d)\n", i, memberList.get(i).nID, memberList.get(i).nAge);
		}
		
		
	}//end of func
}

 输出结果:

No.0 : (ID:3, Age:22)
No.1 : (ID:0, Age:23)
No.2 : (ID:2, Age:24)
No.3 : (ID:1, Age:27)
No.0 : (ID:0, Age:23)
No.1 : (ID:1, Age:27)
No.2 : (ID:2, Age:24)
No.3 : (ID:3, Age:22)

 

 

对数组进行排序

java.lang.Object

  extended by java.util.Arrays

 

 

 

 

 

static void

sort (T[] a)

根据指定比较器产生的顺序对指定对象数组进行排序

static <T> void

sort (T[]a, Comparator <? super T> c)

根据指定比较器产生的顺序对指定对象数组进行排序

 

package test.Java;

import java.util.Comparator;

public class JavaTest {
	
	public static void main(String[] args) {
		Member[] members = {new Member(0, 29),
							new Member(1, 23),
							new Member(2, 22),
							new Member(3, 25)};
		
		//对数组 进行 年龄排序 输出
		java.util.Arrays.sort(members, new SortByAge());
		for (int i = 0; i < members.length; i++) {
			System.out.printf("No.%d :  (ID:%d, Age:%d)\n", i, members[i].nID, members[i].nAge);
		}
		
		//对数组 进行 ID排序 输出
		java.util.Arrays.sort(members, new SortByID());
		for (int i = 0; i < members.length; i++) {
			System.out.printf("No.%d :  (ID:%d, Age:%d)\n", i, members[i].nID, members[i].nAge);
		}
		
	}//end of func
}

 输出结果 :

No.0 :  (ID:2, Age:22)
No.1 :  (ID:1, Age:23)
No.2 :  (ID:3, Age:25)
No.3 :  (ID:0, Age:29)
No.0 :  (ID:0, Age:29)
No.1 :  (ID:1, Age:23)
No.2 :  (ID:2, Age:22)
No.3 :  (ID:3, Age:25)

 

 

 

 

对于上面两个不论是列表排序还是数组排序都有一个方法sort(T[] a) 或  sort(List<T> list)

单参数都没有指定排序规则,因此这两个方法都必须使用另一个接口实现,否则会出现异常

java.lang.Comparable<T>

 

 

int

compateTo (T o)

比较此对象与指定对象的顺序。

 

这一套接口必须要在排序的类中实现

/**
 * Member 类
 * @author Ren.xia
 *
 */
class Member  implements Comparable<Member> {
	int nID = 0;
	int nAge = 0;

	public Member(int nID, int nAge) {
		// TODO Auto-generated constructor stub
		this.nID = nID;
		this.nAge = nAge;
	}
	public int compareTo(Member other) {
		return (this.nID - other.nID);
	}
}

 

排序时就可以这样使用

		java.util.Arrays.sort(members);
		//或
		java.util.Collections.sort(memberList);

 

其结果是相同的,但是个人感觉不太灵活

 

 

 

分享到:
评论

相关推荐

    C#实现对二维数组排序的方法

    总结来说,本文介绍的C#实现二维数组排序的方法,通过将二维数组转换为`DataTable`并利用其内置的排序功能,提供了一种灵活且高效的解决方案。这种方法不仅适用于各种数据类型,而且保持了原始数组的引用,使得排序...

    易语言自定义数据类型数组排序

    本话题聚焦于“易语言自定义数据类型数组排序”,将深入探讨如何在易语言中创建、操作自定义数据类型数组,并实现各种排序算法,如根据产地、类别和售价等属性进行排序。 自定义数据类型在易语言中允许我们定义包含...

    LabVIEW二维数组排序.rar

    总结来说,LabVIEW中的二维数组排序涉及理解二维数组的结构,掌握各种排序方法,包括按行、按列及自定义排序,以及处理数据类型转换和性能优化。熟练掌握这些技能将使你在LabVIEW编程中游刃有余,处理各种数据处理...

    任意数组排序

    任意数组排序 很经典经典 学习交流

    易语言数组排序源码.zip

    易语言是一种基于中文编程的计算机程序设计语言,其设计目标是为了降低编程的门槛,使得不懂英文的用户也能进行软件开发。...同时,这也有助于对比和理解其他编程语言中的排序实现,增强你的编程思维。

    易语言数组排序算法集合

    本资源“易语言数组排序算法集合”提供了多种常见的排序算法的源代码实现,对于学习易语言以及算法理解都有极大的帮助。下面将详细介绍其中提及的几种排序算法。 1. **冒泡排序**: 冒泡排序是最基础的排序算法之...

    c语言的基本算法 数组排序

    C语言是一种广泛使用的编程语言,尤其适合进行底层系统开发和算法实现。在C语言中,数组是基础数据结构之一,可以用来存储同类型的数据集合。本篇内容将深入探讨C语言中的数组排序算法。 首先,数组排序是算法设计...

    8086汇编语言数组排序

    找了好多地方没有找到,自己写一个汇编语言实现的数组排序。

    Matlab数组排序详解docx文档下载

    在MATLAB中,数组排序是数据处理和分析过程中的常见操作。`sort`函数是MATLAB提供的一种方便的工具,可以对各种类型的数组进行升序或降序排序。以下是对`sort`函数的详细说明: 1. **基本用法**: `B = sort(A)` ...

    Labview二维数组排序

    不要看分数高,这个程序绝对可以对得起大家的分数。这个楼主的研究哈!反正下了评价后分数可以返还的................

    VB070-数组排序 源代码

    在编程领域,数组排序是一个非常基础且重要的概念,尤其在Visual Basic (VB)中,它在数据处理和算法实现上扮演着关键角色。本资源"VB070-数组排序 源代码"提供了一组关于如何在VB环境中对数组进行排序的源代码示例,...

    oc中数组排序

    为了更好地复习和巩固OC中的数组排序,可以创建一个练习项目,模拟实际场景,比如根据用户输入的年龄排序一个人物数组,或者根据日期对事件进行排序等。通过编写测试用例,检查不同排序方法的正确性和性能差异。 ...

    .net属性数组排序.rar

    这里是一个简单的步骤来实现属性数组排序: 1. 定义包含属性的对象类: ```csharp public class MyObject { public int PropertyToSort { get; set; } // 其他属性... } ``` 2. 创建一个数组或列表实例,填充对象...

    使用快速排序法对一维数组进行排序

    描述中的程序实现了快速排序法,可能是用一种编程语言如C++、Java或Python编写的,用于对一维数组进行排序。这种程序的实现一般包括上述的三个主要步骤,并可能包含优化措施,例如处理小数组时改用插入排序,或者...

    二维数组如何进行冒泡排序

    ### 二维数组冒泡排序详解 #### 一、引言 冒泡排序是一种简单的排序算法,在数据处理领域有着广泛的应用。对于一维数组而言,冒泡排序实现起来...希望本文能够帮助初学者更好地理解二维数组排序的原理和实现细节。

    易语言文本数组排序模块测试程序源码,易语言文本数组排序模块源

    例如,可以使用“数组排序”命令,该命令接受一个数组和一个可选的比较函数作为参数,然后返回排序后的数组。在编写自己的排序模块时,可以参考这些内置功能,确保代码的稳定性和效率。 总结起来,易语言文本数组...

    数组排序知识代码(c#)

    总的来说,掌握数组排序是C#编程中的基本技能,无论是简单的插入排序,还是利用`Array.Sort()`和`System.Linq`的功能,都能帮助开发者更有效地处理和分析数据。通过实践和理解这些排序算法,可以提高代码性能和...

    flex 数组排序

    ### Flex 数组排序知识点 #### 一、简介 在Flex开发中,经常需要对数组进行排序,特别是当处理复杂的二维数组或对象数组时。本文将详细介绍如何使用Flex中的`sortOn`方法对数组进行排序,并给出具体的代码示例。 ...

    二维数组排序

    #### 四、冒泡排序实现 冒泡排序是一种简单的排序算法,其基本思想是比较相邻的元素。如果第一个比第二个大,就交换它们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这样一轮之后,最后一...

    iOS汉字数组排序

    总之,"ZinkSortArray"工具解决了iOS开发中汉字数组排序的难题,通过将汉字转换为拼音,然后按照拼音进行排序,确保了排序的正确性。在实际使用过程中,开发者可以根据提供的示例代码和文档,灵活地集成到自己的项目...

Global site tag (gtag.js) - Google Analytics