浏览 5888 次
锁定老帖子 主题:Java基础 排序
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-24
最后修改:2009-06-26
//升序 ,假如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();
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-06-10
|
|
返回顶楼 | |
发表时间:2010-06-21
|
|
返回顶楼 | |