Collections.sort方法(可以根据集合中类的属性的比较对集合内的类进行排序)
2015-10-02 22:24
731 查看
Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能;如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的。
compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。
Collections.sort(list, new Comparator(){重写的方法});的第二个参数返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对list进行排序。
第一种方法
user类
Test
a
b
第二种方法
是根据Collections.sort重载方法来实现
compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。
Collections.sort(list, new Comparator(){重写的方法});的第二个参数返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对list进行排序。
第一种方法
user类
/** * 根据order对User排序 */ public class User implements Comparable<user>{ private String name; private Integer order; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getOrder() { return order; } public void setOrder(Integer order) { this.order = order; } public int compareTo(User arg0) { return this.getOrder().compareTo(arg0.getOrder()); } }测试类
Test
public class Test{ public static void main(String[] args) { User user1 = new User(); user1.setName("a"); user1.setOrder(1); User user2 = new User(); user2.setName("b"); user2.setOrder(2); List<user> list = new ArrayList<user>(); //此处add user2再add user1 list.add(user2); list.add(user1); Collections.sort(list); for(User u : list){ System.out.println(u.getName()); } } }输出结果如下
a
b
第二种方法
是根据Collections.sort重载方法来实现
/** * 根据order对User排序 */ public class User { //此处无需实现Comparable接口 private String name;
//如果想对此属性进行compareTo的方法 用int 类型将不能实现必须使用其包装类型 private Integer order; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getOrder() { return order; } public void setOrder(Integer order) { this.order = order; } }具体测试类(片段)
Collections.sort(list,new Comparator(){ public int compare(User arg0, User arg1) { <span style="white-space:pre"> </span>//第一次比较专业 int i = arg0.getOrder().compareTo(arg1.getOrder()); <span style="white-space:pre"> </span>//如果专业相同则进行第二次比较 if(i==0){
//第二次比较 int j=arg0.getXXX().compareTo(arg1.getXXX()); <span style="white-space:pre"> </span>//如果学制相同则返回按年龄排序 if(j==0){ return arg0.getCCC().compareTo(arg1.getCCC()); } return j; } return i; } });
相关文章推荐
- iOS 中获得键盘的弹出和隐藏
- 【Java 语言生态篇】Junit 测试单元
- c/c++ 2048 120行左右~
- 链表(Java)
- SCU 2016 GCD & LCM Inverse(素性测试+DFS)
- CentOS7 增加tomcat 启动,停止,使用systemctl进行配置
- 1002. A+B for Polynomials (25)
- usaco Shuttle Puzzle
- 15个nosql数据库
- angularjs路由例子
- uva10975 trie树or ac自动机
- 关于uefi的机器win8下安装CentOS双系统
- MR基本步骤
- Java中的native关键字与JNI
- Android数据库更新并保留原来数据的实现
- c++ primer 练习5.17
- 1002
- noip2012 vigenere密码 (模拟)
- 特殊的数学图形
- tomcat 自带的压力测试工具使用说明