前言

转自:http://www.cnblogs.com/yueliming/archive/2013/05/22/3092576.html

(这里做了一些小改动)

一直一来对集合中对象的比较方案,有些模糊,这里做些总结:

有两个方法可以实现:

1. 让 Student 实现Comparable接口:

compareTo(Object o)方法是java.lang.Comparable<T>接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comparable<T>接口的,必须重写public int compareTo(T o)方法。

2. 实例化一个比较器:

compare(Object o1,Object o2)方法是java.util.Comparator<T>接口的方法,它实际上用的是待比较对象的compareTo(Object o)方法。

注意:两者对于比较此对象与指定对象的顺序:如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数:

返回整数,1,-1,0;返回1表示大于,返回-1表示小于,返回0表示相等。

代码

1. 实现Comparable接口:

package com.horizon.action;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List; public class Student implements Comparable { private int id;
private int age;
private String name; public Student(int id) {
this.id = id;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public static void main(String args[]) {
List<Student> list = new ArrayList<Student>();
for (int i = ; i > ; i--) {
list.add(new Student(i));
} Collections.sort(list); for (Student s : list) {
System.out.println(s.getId());
}
} public int compareTo(Object o) {
if (o instanceof Student) {
Student s = (Student) o;
if (this.id > s.id) {
return ;
} else {
return ;
}
}
return -;
} }

2. 实例化一个比较器MenuComparator:

package com.horizon.action;

import java.util.Comparator;

public class MenuComparator implements Comparator {

    public int compare(Object o1, Object o2) {
if (null != o1 && null != o2) {
Menu menu1 = (Menu) o1;
Menu menu2 = (Menu) o2;
if (menu1.getId() > menu2.getId()) {
return ;
} else {
return ;
}
}
return ;
} }
package com.horizon.action;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List; public class Menu { private int id;
private int age;
private String name; public Menu(int id) {
this.id = id;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public static void main(String args[]) {
List<Menu> list = new ArrayList<Menu>();
for (int i = ; i > ; i--) {
list.add(new Menu(i));
} for (Menu m : list) {
System.out.println(m.getId());
}
Collections.sort(list,new MenuComparator()); for (Menu m : list) {
System.out.println(m.getId());
}
}
}

3.两个合体:

package com.horizon.action;

public class User implements Comparable<Object> {
int id;
String name; public User(int id, String name) {
this.id = id;
this.name = name;
} /*
* Getters and Setters
*/
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public int compareTo(Object o) {
if (this == o) {
return ;
} else if (o != null && o instanceof User) {
User u = (User) o;
if (id <= u.id) {
return -;
} else {
return ;
}
} else {
return -;
}
}
}
package com.horizon.action;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; public class Test {
// 编写Comparator,根据User的id对User进行排序
private static final Comparator<User> COMPARATOR = new Comparator<User>() {
public int compare(User o1, User o2) {
return o1.compareTo(o2);// 运用User类的compareTo方法比较两个对象
}
}; public static void main(String[] args) {
List<User> student = new ArrayList<User>();
User user1 = new User(, "yueliming");
User user2 = new User(, "yueliming");
student.add(user2);
student.add(user1);
Collections.sort(student, COMPARATOR);// 用我们写好的Comparator对student进行排序
for (int i = ; i < student.size(); i++) {
System.out.println(student.get(i).getId());
}
}
}

java中compareTo和compare方法之比较,集合中对象的比较的更多相关文章

  1. java中compareTo和compare方法之比较

    这两个方法经常搞混淆,现对其进行总结以加深记忆. compareTo(Object o)方法是java.lang.Comparable接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comp ...

  2. Java分享笔记:使用entrySet方法获取Map集合中的元素

    /*--------------------------------- 使用entrySet方法取出Map集合中的元素: ....该方法是将Map集合中key与value的关系存入到了Set集合中,这 ...

  3. 解决PNG图片在IE6中背景不透明方法_解决IE6中PNG背

    解决PNG图片在IE6中背景不透明方法_解决IE6中PNG背   目录 解决代码 解决png图片在html中 解决png作为网页背景-css 1.解决PNG图片在IE6中背景不透明的CSS与JS代码 ...

  4. 【转载】C#中使用Average方法对List集合中相应元素求平均值

    在C#的List集合操作中,有时候需要对List集合元素进行汇总求平均值,如数值类型的List集合元素,有时候对象类型的List集合也需要对集合中的元素的某个对象进行汇总求平均值,此时都可以使用到Av ...

  5. 【转载】 C#中使用Count方法获取List集合中符合条件的个数

    很多时候操作List集合的过程中,我们需要根据特定的查询条件,获取List集合中有多少个实体对象符合查询条件,例如一批产品的对象List集合,如果这批产品的不合格数量大于10则重点备注.在C#中可以自 ...

  6. C#中字符串大小比较函数--CompareTo与Compare方法(需要完善补充)

    字符串比较的原理是什么? 原理: 从两个字符串的第一个字符开始逐个进行比较(按字符的ASCII值进行大小比较),直到出现不同的字符或遇到‘\0’为止. 如果全部字符都相同,就认为两字符串相等,返回0: ...

  7. Java分享笔记:使用keySet方法获取Map集合中的元素

    /*--------------------------- Map集合中利用keySet方法获取所有的元素值: ....keySet方法:将Map中的所有key值存入到Set集合中, ....利用Se ...

  8. java 数据类型:<泛型>在方法中和在构造器中的应用

    背景: Java不允许我们把对象放在一个未知的集合中. import java.util.ArrayList; import java.util.List; /** * @ClassName Meth ...

  9. 【Java面试题】54 去掉一个Vector集合中重复的元素

    在Java中去掉一个 Vector 集合中重复的元素 1)通过Vector.contains()方法判断是否包含该元素,如果没有包含就添加到新的集合当中,适用于数据较小的情况下. import jav ...

随机推荐

  1. 四十四 常用内建模块 struct

    准确地讲,Python没有专门处理字节的数据类型.但由于str既是字符串,又可以表示字节,所以,字节数组=str.而在C语言中,我们可以很方便地用struct.union来处理字节,以及字节和int, ...

  2. Mybatis框架-1

    1.Mybatis框架: Mybatis是一个半自动的对象关系映射(ORM),实现结果集的自动封装,sql写到配置文件中: Mybatis使用的是DTD约束. 2.Mybatis模块调用: 3.Sql ...

  3. PHP 扩展安装

    PHP版本 >= 5.6.4 PHP扩展:OpenSSL   --- 已经有啦 PHP扩展:PDO PHP扩展:Mbstring PHP扩展:Tokenizer PHP扩展:XML .安装php ...

  4. Windows10 Docker加速

    参考地址:https://blog.csdn.net/wanderlustlee/article/details/80216588 在刚开始使用时,有可能因为网络的问题导致整个镜像的下载过程不是太顺畅 ...

  5. 用谷歌浏览器Chrome浏览jQuery Mobile页面需要配置Tomcat服务器

    在浏览jQuery Mobile 页面中,除了 Chrome浏览器出错外,其他的浏览器都ok: 这里,是因为需要单独配置 Tomcat 服务: 1.先配置java jdk: 2.下载,安装,配置,To ...

  6. UGUI的优点新UI系统二 直观、易于使用

    UGUI的优点新UI系统二 直观.易于使用   对于UI控件,开发者可以直接使用鼠标在Scene视图里编辑它们的大小.位置和旋转角度,而无需编写任何代码,以Button为例,如图1-3.图1-4和图1 ...

  7. Windows命令远程执行工具Winexe

    Windows命令远程执行工具Winexe   在对Windows系统执行渗透测试中,通过各种方式可以获取目标主机的用户名和密码.这时,只要对方主机开启文件共享服务,就可以借助Winexe工具远程执行 ...

  8. css-移动&缩放元素

    transform 属性向元素应用 2D 或 3D 转换.该属性允许我们对元素进行旋转.缩放.移动或倾斜. 用法:object.style.transform="rotate(7deg)&q ...

  9. 【树链剖分】bzoj2243 [SDOI2011]染色

    树链剖分模板题.线段树维护每个段中的颜色数.左端点颜色.右端点颜色. pushup: col[rt]=col[rt<<1]+col[rt<<1|1]-(Rcol[rt<& ...

  10. Educational Codeforces Round 8 D. Magic Numbers 数位DP

    D. Magic Numbers 题目连接: http://www.codeforces.com/contest/628/problem/D Description Consider the deci ...