参考来自:

http://blog.csdn.net/lifuxiangcaohui/article/details/41543347

http://www.cnblogs.com/liuyuanyuanGOGO/p/java_collections.html

1.comparable的使用示例

可以看到,实现Comparable接口后,必须要重写compareTo方法。这样就使得我们自定义的类StudentDTO具备比较功能。当把StudentDTO放入集合中时,就可以对集合内的参数进行排序。

 public class StudentDTO implements Comparable{
private String name;
private int age; //setter和getter略 @Override
public int compareTo(Object o){
StudentDTO sdto = (StudentDTO)o;
int otherAge = sdto.getAge();
//注意这里的compareTo取决于参数类型,比如这里是int的比较
return this.age.compareTo(otherAge);
}
}
 public static void main(String[] args){
List<StudentDTO> studentList = new ArrayList(); StudentDTO s1 = new StudentDTO ();
s.setName("yuanyuan");
s.setAge(22);
studentList.add(s1); StudentDTO s1 = new StudentDTO ();
s.setName("lily");
s.setAge(23);
studentList.add(s2); Collections.sort(studentList); //按照age升序 22,23,
Collections.reverse(studentList); //按照age降序 23,22
}

2.comparator的使用示例

 class MyCompartor implements Comparator{
@Override
public int compare(Object o1, Object o2){
StudentDTO sdto1= (StudentDTO)o1;
StudentDTO sdto2= (StudentDTO)o2;
return sdto1.getAge.compareTo(stdo2.getAge());
}
}
 public static void main(String[] args){
List<StudentDTO> studentList = new ArrayList();
StudentDTO s1 = new StudentDTO ();
s1.setName("yuanyuan");
s1.setAge(22);
studentList.add(s1); StudentDTO s2 = new StudentDTO ();
s.2setName("lily");
s2.setAge(23);
studentList.add(s2); MyComparetor mc = new MyComparetor();
Collections.sort(studentList,mc); //按照age升序 22,23,
Collections.reverse(studentList,mc); //按照age降序 23,22
}

还有一种更常用的写法:

 //前面略
Collections.sort(studentList, new Comparator<StudentDTO>(){
/*
* int compare(Student o1, Student o2) 返回一个基本类型的整型,
* 返回负数表示:o1 小于o2,
* 返回0 表示:o1和o2相等,
* 返回正数表示:o1大于o2。
*/
public int compare(StudentDTO o1, StudentDTO o2) {
//按照学生的年龄进行升序排列 return o1.getAge().compareTo(o2.getAge());
}
});

3.CompareTo方法

由前面可知,当自定义类StudentDTO实现comparable接口后,重写了方法compareTo()具备了比较功能。

而java中的基本类都具备比较功能。比如String类:

 public final class String implements java.io.Serializable, Comparable<String>, CharSequence
 public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value; int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}

所以当使用Collection.sort(list<String>())时,可以直接用。而对于自定义的类,就需要用上述两种方法中的一种来完成排序。

其次,Collections.sort()、Arrays.sort()是类似的方法。不过针对不同的类型。

并且方法里的参数可以有locale,因此就可以对中文排序等。

最新文章

  1. 慕课网-安卓工程师初养成-2-5 如何命名Java变量
  2. Android 去掉title bar的3个方法
  3. [MFC]MFC中OnDraw与OnPaint的区别
  4. ubuntu grub配置
  5. Java String StringBuffer StringBuilder
  6. 《Linear Algebra and Its Applications》-chaper3-行列式-克拉默法则
  7. Boost Thread学习笔记三
  8. WPF案例 (四) 模拟Windows7桌面任务栏
  9. QTP使用技巧
  10. Vim插件之插件管理器Vundle
  11. js操作cookie 使用详解
  12. 自学Python5.4-内置模块(2)
  13. Linux 下的JDK环境的搭建
  14. 本地项目上传到CODING
  15. ABA问题
  16. 从零开始学 Web 之 ES6(一)ES5严格模式
  17. codeforces547a
  18. 【转】Java学习---JDK、JRE和JVM的关系
  19. HTML5基础小结(二)——标签小例
  20. GIT修改邮箱

热门文章

  1. 【CZY选讲&#183;一道图论好题】
  2. linux正则表达式(一)
  3. Restful 权限的思考
  4. jquery,zepto插件编写相关
  5. clips 前端 js 倒计时 获取验证码的按钮
  6. MyEclipse内安装与使用SVN
  7. 杭电oj2012-2021
  8. (七)insmod/rmmod
  9. mysql 共享空间转为独立表空间
  10. 关于 Delphi 中流的使用(1) 用 TMemoryStream(内存流) 入门 &amp;&amp;&amp; 关于指针的迷惑,我自己问的.