`
hcleon
  • 浏览: 266443 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java基础--文件排序

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

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

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

Java代码
//升序 ,假如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;  
        }  
    } 

//升序 ,假如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接口,但是我们排序的依据变了怎么办?



Java代码
//对一个类没法实现多种排序。以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();       
分享到:
评论

相关推荐

    JAVA作业-tag排序

    虽然提供的代码示例中并没有直接实现“tag排序”的功能,但通过以上分析可以看出,该作业涉及到了JAVA语言的基础知识以及如何使用JAVA进行日期时间处理等方面的内容。针对“tag排序”的具体实现,可以通过为待排序的...

    Java Application-J2SE实例基础程序

    Java Application-J2SE实例基础程序是Java编程领域中的核心部分,主要关注于桌面应用程序的开发。J2SE,即Java 2 Platform, Standard Edition,是Java平台的标准版,提供了开发和运行桌面应用、服务器端应用以及网络...

    mongo-java-driver-3.0.2.zip

    总之,`mongo-java-driver-3.0.2.zip`是Java开发者与MongoDB数据库交互的基础,包含了连接、查询、操作数据等一系列功能。了解并熟练掌握这个驱动的使用,对于任何涉及MongoDB的Java项目都是至关重要的。

    Java 实例 - 文件路径比较源代码-详细教程.zip

    1. `equals()`方法:这是最基础的比较方法,用于判断两个`File`对象是否代表相同的文件或目录。如果两个路径字符串完全相同(包括大小写),`equals()`会返回`true`。 2. `compareTo()`方法:此方法根据路径字符串...

    Java软件开发实战 Java基础与案例开发详解 4-6 数组和排序算法章节练习 共4页.pdf

    3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...

    Java 基础(Java-8).zip

    (JSP)ServletJava 多项选择题Java 设计模式休眠Spring 框架基础目录介绍Java 架构Java 数据类型Java 方法Java 函数式编程Java Lambda 表达式Java 类Java 构造函数Java 数组Java 字符串Java 反射Java 流Java 正则...

    Java 大文件读取排序

    在Java编程中,处理大文件是一项挑战,特别是当涉及到读取、排序以及处理大量数据时。这个主题,"Java 大文件读取排序",主要关注如何高效地操作那些超出内存容量的大文件,同时保持程序的性能和稳定性。在本文中,...

    mysql-connector-java-5.1.18驱动包

    MySQL Connector/J是MySQL数据库系统与Java应用程序之间的桥梁,...总的来说,mysql-connector-java-5.1.18驱动包是Java开发者与MySQL数据库交互的基础工具,理解其工作原理和使用方法对于进行Java数据库开发至关重要。

    java课设--个人备忘录管理系统

    首先,我们要了解Java编程语言的基础知识。Java是一种面向对象的、跨平台的编程语言,由Sun Microsystems(现已被Oracle收购)开发。它的“一次编写,到处运行”特性使得Java代码可以在任何支持Java的平台上运行,这...

    Java版-剑指offer数据结构与算法 视频教程 下载 百度网盘链接2.zip

    在Java编程中,常见的算法包括排序(如冒泡排序、快速排序、归并排序)、查找(如二分查找)、动态规划、贪心策略、回溯法、分治法等。这些算法在解决实际问题,尤其是在处理大数据和优化程序性能方面至关重要。 ...

    java编程--单学生成绩管理系统

    在本项目"java编程--单...通过这个项目,学习者可以深入理解Java编程的基本概念,掌握面向对象设计,以及文件操作、排序算法和异常处理等实际应用技术。这对于提升Java编程能力,尤其是实际项目开发经验是非常有益的。

    apache-hive-3.1.2+mysql-connector-java-5.1.32-bin.jar

    总结起来,这个压缩包提供了搭建和使用Apache Hive 3.1.2的基础,包括Hive的二进制文件、MySQL连接器以及详细的安装指南。对于那些想要在大数据环境中进行数据分析和处理的人来说,这是一个非常实用的资源。在实际...

    java排序算法-大全.rar

    这个名为"java排序算法-大全.rar"的压缩包文件显然包含了多种Java实现的排序算法,这对于我们理解和掌握这些算法至关重要。 首先,让我们从标签提及的两个经典排序算法开始:冒泡排序和折半排序。 1. **冒泡排序**...

    Java Core - bookSystem

    总之,"Java Core - bookSystem"项目旨在通过实践应用,帮助开发者深入理解Java IO流的使用,以及如何构建一个基本的文件基础的图书管理系统。通过这个项目,不仅可以掌握文件操作,还能提升面向对象编程、异常处理...

    【IT十八掌徐培成】Java基础第03天-05.选择排序-折半查找.zip

    选择排序-折半查找.zip”的压缩包文件中,包含了关于Java编程基础的两个重要概念:选择排序(Selection Sort)和折半查找(Binary Search)。接下来,我们将深入探讨这两个算法。 选择排序是一种简单的排序算法,其工作...

    javaGUI成绩录入和排序文件读取

    Java GUI成绩录入与排序文件读取是一个典型的桌面应用程序开发示例,主要涉及到Java Swing或JavaFX库用于构建图形用户界面,以及文件I/O操作来处理数据的存储和检索。在这个项目中,用户可以通过一个简单的界面输入...

    Java软件开发实战 Java基础与案例开发详解 3-10 java基础知识章节练习 共4页.pdf

    3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...

    2014-蓝桥杯预赛-Java本科-B组真题

    3. **算法**:掌握基础算法,如排序(冒泡排序、选择排序、插入排序、快速排序、归并排序等)、搜索(线性搜索、二分搜索、深度优先搜索、广度优先搜索等)、动态规划、贪心算法、回溯法等。这些算法是解决问题的...

    JavaAPI--1.6

    - **java.io**: 提供了文件I/O操作的类,如`File`、`InputStream`、`OutputStream`、`Reader`、`Writer`等。 - **java.util**: 包含了集合框架、日期/时间功能、随机数生成器以及各种实用工具类。 2. **集合框架*...

    java私塾面试题----JAVA基础3

    ### Java私塾面试题知识点详解 #### 1. Heap与Stack的区别 Heap和Stack是Java内存管理中的...以上是根据Java私塾面试题整理的知识点详解,涵盖了Java基础中的重要概念和技术细节,对于深入理解Java编程具有重要意义。

Global site tag (gtag.js) - Google Analytics