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();
分享到:
相关推荐
Java基础知识: 冒泡排序详解,简单而详细的讲清楚了,什么是冒泡排序。 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如...
java基础
1.冒泡排序的原理:每次都从第一个元素开始(索引0),向后两两比较,只要后面的比前面的大,就交换(从大到小) 2.通过画图分析,5个数字排4趟,n数字排n-1趟,而外层的for循环代表的是循环的趟数,所以外层循环的结束条件是...
java的各种排序方法的总结,有助于加深对排序的理解
java基础笔记数据结构-排序二叉树,详细描述了排序二叉树的原理及其实现方式,基础数据结构。
java排序算法大全 为了便于管理,先引入个基础类: 一 插入排序 二 冒泡排序 三,选择排序 四 Shell排序 五 快速排序 六 归并排序 等等
JAVA四种基本排序的总结
该文档是针对比较经典的8中算法,从原理、设计到代码实现方面做了详细描述。通俗易懂,比较适合初学者入门、也适合专业者巩固基础。
java技术基础java技术基础java技术基础
里面有几个很好的javaSe基础题目,比如有javaSe的冒泡排序,求数组的最大值,求数组的最小只,求数组是否对称等等算法实例。
用java实现了10种基础排序,其内容包括: 1.冒泡排序 2.选择排序 3.插入排序 4.快速排序 5.希尔排序 6.归并排序 7.堆排序 8.桶排序 9.基数排序 10.计数排序 如有疑问请私信我
基础编程:Java快速排序实例详解
java基础知识冒泡排序上浮法下沉法代码实例讲解
HashMap里面的元素是无序的,要进行排序的话只能是用TreeMap和SortedMap,java实现的map排序
04-Java基础(数组-常见操作-选择排序
以上是基础java知识,内涵十进制转换/冒牌排序/字符串传值转换
JAVA数组排序经典之一,冒泡法,最基础也最容易理解的一种排序方法
对于刚开始接触java的人来说超常用的排序方法是非常有帮助的。
该文档主要整理了常见的Java基础面试题,包含以下内容: 1. 抽象类和接口的区别 2. 什么时候使用抽象类,什么时候使用接口 3. 八大基本数据类型,所占字节数 4. List、Set、Map的区别 5. 什么情况下使用List、...
快速排序的简单实现程序,java编制,迭代法对数据组分区,知道简单的java基础,基本就可以看懂这个小程序了