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();
分享到:
相关推荐
虽然提供的代码示例中并没有直接实现“tag排序”的功能,但通过以上分析可以看出,该作业涉及到了JAVA语言的基础知识以及如何使用JAVA进行日期时间处理等方面的内容。针对“tag排序”的具体实现,可以通过为待排序的...
Java Application-J2SE实例基础程序是Java编程领域中的核心部分,主要关注于桌面应用程序的开发。J2SE,即Java 2 Platform, Standard Edition,是Java平台的标准版,提供了开发和运行桌面应用、服务器端应用以及网络...
总之,`mongo-java-driver-3.0.2.zip`是Java开发者与MongoDB数据库交互的基础,包含了连接、查询、操作数据等一系列功能。了解并熟练掌握这个驱动的使用,对于任何涉及MongoDB的Java项目都是至关重要的。
1. `equals()`方法:这是最基础的比较方法,用于判断两个`File`对象是否代表相同的文件或目录。如果两个路径字符串完全相同(包括大小写),`equals()`会返回`true`。 2. `compareTo()`方法:此方法根据路径字符串...
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 封装 ...
(JSP)ServletJava 多项选择题Java 设计模式休眠Spring 框架基础目录介绍Java 架构Java 数据类型Java 方法Java 函数式编程Java Lambda 表达式Java 类Java 构造函数Java 数组Java 字符串Java 反射Java 流Java 正则...
在Java编程中,处理大文件是一项挑战,特别是当涉及到读取、排序以及处理大量数据时。这个主题,"Java 大文件读取排序",主要关注如何高效地操作那些超出内存容量的大文件,同时保持程序的性能和稳定性。在本文中,...
MySQL Connector/J是MySQL数据库系统与Java应用程序之间的桥梁,...总的来说,mysql-connector-java-5.1.18驱动包是Java开发者与MySQL数据库交互的基础工具,理解其工作原理和使用方法对于进行Java数据库开发至关重要。
首先,我们要了解Java编程语言的基础知识。Java是一种面向对象的、跨平台的编程语言,由Sun Microsystems(现已被Oracle收购)开发。它的“一次编写,到处运行”特性使得Java代码可以在任何支持Java的平台上运行,这...
在Java编程中,常见的算法包括排序(如冒泡排序、快速排序、归并排序)、查找(如二分查找)、动态规划、贪心策略、回溯法、分治法等。这些算法在解决实际问题,尤其是在处理大数据和优化程序性能方面至关重要。 ...
在本项目"java编程--单...通过这个项目,学习者可以深入理解Java编程的基本概念,掌握面向对象设计,以及文件操作、排序算法和异常处理等实际应用技术。这对于提升Java编程能力,尤其是实际项目开发经验是非常有益的。
总结起来,这个压缩包提供了搭建和使用Apache Hive 3.1.2的基础,包括Hive的二进制文件、MySQL连接器以及详细的安装指南。对于那些想要在大数据环境中进行数据分析和处理的人来说,这是一个非常实用的资源。在实际...
这个名为"java排序算法-大全.rar"的压缩包文件显然包含了多种Java实现的排序算法,这对于我们理解和掌握这些算法至关重要。 首先,让我们从标签提及的两个经典排序算法开始:冒泡排序和折半排序。 1. **冒泡排序**...
总之,"Java Core - bookSystem"项目旨在通过实践应用,帮助开发者深入理解Java IO流的使用,以及如何构建一个基本的文件基础的图书管理系统。通过这个项目,不仅可以掌握文件操作,还能提升面向对象编程、异常处理...
选择排序-折半查找.zip”的压缩包文件中,包含了关于Java编程基础的两个重要概念:选择排序(Selection Sort)和折半查找(Binary Search)。接下来,我们将深入探讨这两个算法。 选择排序是一种简单的排序算法,其工作...
Java GUI成绩录入与排序文件读取是一个典型的桌面应用程序开发示例,主要涉及到Java Swing或JavaFX库用于构建图形用户界面,以及文件I/O操作来处理数据的存储和检索。在这个项目中,用户可以通过一个简单的界面输入...
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 封装 ...
3. **算法**:掌握基础算法,如排序(冒泡排序、选择排序、插入排序、快速排序、归并排序等)、搜索(线性搜索、二分搜索、深度优先搜索、广度优先搜索等)、动态规划、贪心算法、回溯法等。这些算法是解决问题的...
- **java.io**: 提供了文件I/O操作的类,如`File`、`InputStream`、`OutputStream`、`Reader`、`Writer`等。 - **java.util**: 包含了集合框架、日期/时间功能、随机数生成器以及各种实用工具类。 2. **集合框架*...
### Java私塾面试题知识点详解 #### 1. Heap与Stack的区别 Heap和Stack是Java内存管理中的...以上是根据Java私塾面试题整理的知识点详解,涵盖了Java基础中的重要概念和技术细节,对于深入理解Java编程具有重要意义。