`
jsjxqjy
  • 浏览: 118242 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java基础 排序

阅读更多



1. Comparable 接口 :
Collections.sort(new ArrayList<Obj>() );

当我们需要对ArrayList里面的Obj进行排序的时候,发现这个Obj没有实现Comparable接口,说实话,我也不知道要实现这个接口才可以排序的,是IDE工具提醒我的

当我看了Collections.sort 的源码发现,最底层的比较 ,还是依据 Comparable 接口的compareTo 方法来比较的,所有要想排序,就一定要让 Obj基类实现 Comparable 接口的compareTo 方法。

//升序 ,假如Obj对象有Id 
public int compareTo(Obj o) {

		int arg0 = this.getId();
		int arg1 = o.getId();
		if (arg0 > arg1) 
		{
			return 1;
		} 
		else if (arg0 == arg1) 
		{
			return 0;
		} 
		else 
		{
			return -1;
		}
	}

//降序 ,假如Obj对象有Id 
public int compareTo(Obj o) {

		int arg0 = this.getId();
		int arg1 = o.getId();
		if (arg0 > arg1) 
		{
			return -1;
		} 
		else if (arg0 == arg1) 
		{
			return 0;
		} 
		else 
		{
			return 1;
		}
	}

 附带说明: Collections.sort() 还是调用的Arrays.sort()的方法 .这个是我自己想的,后来网上看见早有人知道了

哈哈

下面的情况是同学发我的:

 

2. 如果我们的基类已经实现了Comparable接口,但是我们排序的依据变了怎么办?

 

//对一个类没法实现多种排序。以File类为例,它实现了Comparable接口,但是
//是按照名称排序的。如果要按照大小排序,或者按修改时间排序呢?对这两种情
//况,使用java.util包的Comparator接口:
//Arrays.sort(Object[] arr, Comparator com)

//Collections.sort(Object[] arr, Comparator com)

//Comparator接口的方法:

//
//public int compare(Object o1, Object o2) 当o1比o2大时返回一个正整数

//public boolean equals(Object obj)  判断obj与这个Comparator是否同一
//个对象

//下面使用Comparator对文件实现了按文件大小或修改时间排序:
class FileUtils {

    static class CompratorByLastModified implements Comparator {

       public int compare(Object o1, Object o2) {

           File file1 = (File)o1;

           File file2 = (File)o2;

           long diff = file1.lastModified() - file2.lastModified();

           if (diff > 0)

              return 1;

           else if (diff == 0)

              return 0;

           else

              return -1;

       }

      

       public boolean equals(Object obj){

           return true;  //简单做法

       }

    }

 

    static class CompratorBySize implements Comparator {

       public int compare(Object o1, Object o2) {

           File file1 = (File)o1;

           File file2 = (File)o2;

           long diff = file1.length() - file2.length();

           if (diff > 0)

              return 1;

           else if (diff == 0)

              return 0;

           else

              return -1;

       }

      

       public boolean equals(Object obj){

           return true;  //简单做法

       }

    }

 

}

调用的示例:

       File dir = new File("C:\\temp");

       File[] files = dir.listFiles();

 

       System.out.print("before sort: ");

       for (int i = 0; i< files.length; i++)

           System.out.print(files[i] + " ");

       System.out.println();      

      

       Arrays.sort(files);

       System.out.print("sort by name: ");

       for (int i = 0; i< files.length; i++)

           System.out.print(files[i] + " ");

       System.out.println();      

 

       Arrays.sort(files, new FileUtils.CompratorBySize());

       System.out.print("sort by size: ");

       for (int i = 0; i< files.length; i++)

           System.out.print(files[i] + " ");

       System.out.println();      

 

       Arrays.sort(files, new FileUtils.CompratorByLastModified());

       System.out.print("sort by last modified: ");

       for (int i = 0; i< files.length; i++)

           System.out.print(files[i] + " ");

       System.out.println();      



 

分享到:
评论
2 楼 jsjxqjy 2010-06-21  
zzpxingfu 写道



我这里的是 对象的排序, 不是数据的
1 楼 zzpxingfu 2010-06-10  

相关推荐

    java基础冒泡排序.ppt

    Java基础知识: 冒泡排序详解,简单而详细的讲清楚了,什么是冒泡排序。 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如...

    java数组排序

    在Java编程语言中,数组排序是一项基础且重要的任务。它涉及到不同的算法,这些算法通过比较和交换元素来达到数组元素的有序状态。本篇将详细探讨几种常见的排序算法及其在Java中的实现。 首先,让我们从最简单的...

    JAVA 8种排序介绍及实现

    在编程领域,排序算法是基础且重要的数据处理技术。本文将介绍两种常见的排序算法:直接插入排序和希尔排序,并通过Java代码实现来帮助理解。 1. 直接插入排序(直接插入排序) 直接插入排序是一种简单的排序方法,...

    java基础 算法排序.md

    java基础

    java冒泡排序java冒泡排序集锦方法!

    以上三个知识点总结了关于 Java 排序的一些基本应用,包括基础的冒泡排序算法、使用标准库 `Collections.sort()` 进行排序以及使用 `RuleBasedCollator` 实现国际化排序等。这些技术对于编写高效、可维护的 Java ...

    java基础 经典算法之冒泡排序详解

    1.冒泡排序的原理:每次都从第一个元素开始(索引0),向后两两比较,只要后面的比前面的大,就交换(从大到小) 2.通过画图分析,5个数字排4趟,n数字排n-1趟,而外层的for循环代表的是循环的趟数,所以外层循环的结束条件是...

    Java 基础各种排序总结

    在编程领域,排序是至关重要的一个概念,尤其是在Java这样的面向对象编程语言中。本文将深入探讨Java中的各种排序算法,帮助你巩固理解并提升编程技能。 首先,我们从最基本的内部排序算法开始,如冒泡排序(Bubble...

    java 选择排序法

    选择排序是一种简单直观的排序算法...总的来说,Java的选择排序是一种基础的排序算法实现,它利用了数组的特性进行元素的查找和交换。虽然效率较低,但其简单易懂的逻辑使得它在教学和理解排序算法方面具有一定的价值。

    JAVA排序汇总 各种排序

    在Java编程语言中,排序是数据处理中非常基础且重要的操作。本文将全面解析Java中的各种排序算法,帮助你理解并掌握它们的核心概念、实现方式以及适用场景。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序...

    JAVA冒泡排序和快速排序算法

    在编程领域,排序算法是数据结构与算法学习中的基础部分,尤其在JAVA中,掌握不同的排序算法对于提高程序效率至关重要。本节将深入探讨两种常见的排序算法:冒泡排序和快速排序。 首先,我们来详细讲解冒泡排序。...

    各种排序算法比较(java实现)

    在IT领域,排序算法是计算机科学中的基础但至关重要的部分,尤其在数据处理和数据分析中起着关键作用。本文将详细探讨标题所提及的几种排序算法:合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并...

    JAVA各种排序方法及改良

    在编程领域,排序是至关重要的一个环节,尤其是在Java这样的面向对象语言中。本文将深入探讨Java中的各种排序方法以及它们的改良策略。首先,我们来看看几种基础的排序算法,然后讨论如何通过优化来提高这些算法的...

    java冒泡排序,插入排序,堆排序源码(终端输入,可以选择排序方法)

    在本文中,我们将深入探讨Java编程中的三种...了解和掌握这些基础排序算法对于提升编程能力,尤其是解决实际问题的能力,具有极大的帮助。无论你是初学者还是经验丰富的开发者,理解并实践这些算法都是不可或缺的步骤。

    JAVA四种基本排序的总结

    在Java编程语言中,排序是数据处理中非常基础且重要的操作。本文将深入探讨四种基本的排序算法:冒泡排序、插入排序、选择排序和快速排序。这些算法各有特点,适用于不同的场景,理解它们的工作原理有助于提升编程...

    Java选择排序算法源码

    在编程领域,排序算法是计算机科学中的基础概念,它们用于整理数据序列,使其按照特定顺序排列。本主题将深入探讨Java实现的选择排序算法,这是一种简单直观的排序算法,适合新手学习。 选择排序(Selection Sort)...

    Java各种排序算法代码

    在编程领域,排序算法是计算机科学的基础之一,尤其是在Java这样的高级编程语言中。排序算法用于组织数据,使得数据按照特定顺序排列,这对于数据分析、数据库管理、搜索效率提升等都有着重要作用。下面将详细介绍...

    JAVA经典排序汇总

    然而,理解并掌握各种基础排序算法原理,对于优化算法、解决特定问题以及面试准备都是十分有益的。 文章中提供的`SortTest`类包含了创建随机数组、打印数组、交换数组元素以及实现冒泡排序和直接选择排序的示例代码...

    java版冒泡排序,插入排序,堆排序,快速排序,归并排序,希尔排序,桶排序

    在编程领域,排序算法是数据结构与算法学习中的基础部分,它们用于整理无序的数据序列。以下是关于Java实现的七种排序算法的详细说明: 1. **冒泡排序(Bubble Sort)**: 冒泡排序是一种简单的排序算法,通过不断...

    Java各种排序算法(含代码)

    在编程领域,排序算法是数据结构与算法学习中的基础部分,尤其在Java中,了解和掌握各种排序算法对于提升程序性能至关重要。以下是对标题和描述中提到的Java各种排序算法的详细解释,以及它们的实现代码概述。 1)*...

Global site tag (gtag.js) - Google Analytics