第一种Comparator接口比较器:
User2.java
public class User2 {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private String name;
private int age;
}
MyComparator.java
import java.util.Comparator;
public class MyComparator implements Comparator{
public int compare(Object o1, Object o2) {
if(null==o1||null==o2){
return -1;
}
User2 u1=(User2) o1;
User2 u2=(User2) o2;
if (u1.getAge() > u2.getAge()) {
return 1; // 第一个大于第二个
} else if (u1.getAge() < u2.getAge()) {
return -1;// 第一个小于第二个
} else {
return 0; // 等于
}
}
}
Test.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// 接口比较器比较,是定义在类的外部的,它不会破坏user2本身
List list = new ArrayList();
User2 u1 = new User2();
u1.setName("aaa");
u1.setAge(10);
list.add(u1);
User2 u2 = new User2();
u2.setName("bbb");
u2.setAge(30);
list.add(u2);
User2 u3 = new User2();
u3.setName("ccc");
u3.setAge(20);
list.add(u3);
Collections.sort(list, new MyComparator());
for (int i = 0; i < list.size(); i++) {
User2 u = (User2) list.get(i);
System.out.println(u.getAge());
}
}
}
第二种 类比较器Comparable
User.java
public class User implements Comparable{
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private String name;
private int age;
public int compareTo(Object o) {
User u=(User) o;
if(null==u){
return -1;
}
if (this.age > u.getAge()) {
return 1; // 第一个大于第二个
} else if (this.age < u.getAge()) {
return -1;// 第一个小于第二个
} else {
return 0; // 等于
}
}
}
Test.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// 类比较器Comparable
// Comparable是在内部定义的方法实现的排序.它将会改变对象(User)本身
List list = new ArrayList();
User u1 = new User();
u1.setName("aaa");
u1.setAge(10);
list.add(u1);
User u2 = new User();
u2.setName("bbb");
u2.setAge(30);
list.add(u2);
User u3 = new User();
u3.setName("ccc");
u3.setAge(20);
list.add(u3);
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
User u = (User) list.get(i);
System.out.println(u.getAge());
}
}
}
很显示第一种要比第二种灵活。
如果有新的比较方式,只需要传一个比较规则(实现Comparator)。
Collections.sort(List, Comparator);
分享到:
相关推荐
与 Comparable 接口不同,Comparator 是一个外部比较器,它可以独立于被比较的对象。 在上面的示例代码中,我们定义了一个 CompareTest 类,该类实现了 Comparator 接口。CompareTest 类用于比较两个 Simple 对象的...
在Java编程语言中,排序是数据处理中一个非常常见的需求,而`Comparator`和`Comparable`接口则是实现排序的关键工具。这两个接口都是用于比较对象,但它们的应用场景和使用方式有所不同。 首先,`Comparable`接口是...
在Java编程语言中,Comparable和Comparator接口是两个重要的概念,它们都用于对象的排序,但有着不同的使用场景和特点。本文将深入探讨这两个接口的区别,以及它们在实际开发中的应用。 首先,我们来了解一下...
Comparator是一个比较器接口,它提供了一种在类本身不支持排序的情况下控制对象次序的方式。通过实现Comparator接口,你可以创建一个独立于原始类的比较逻辑,这使得排序更灵活。Comparator接口包含两个方法:`...
与之相比,Comparator 是一个比较器接口。我们可以通过实现 Comparator 接口来控制某个类的次序,而该类本身不支持排序。Comparator 接口包含两个函数,compare 和 equals,它的定义如下: ```java package java....
当一个类实现了Comparable接口,意味着类的实例可以被自然排序,无需额外的比较器。例如,String类就实现了Comparable接口,可以直接进行字符串比较。如果有一个自定义类,如Person1,实现了Comparable接口,那么它...
而Comparator接口则不同,它不在类的内部,而是作为一个独立的比较器存在。Comparator接口也定义了一个`compare(T o1, T o2)`方法,用于比较两个对象。这意味着你可以在不修改原始类的情况下,为不同的比较需求创建...
在Java编程中,为了对自定义对象进行排序,Java提供了两种接口:`Comparable`与`Comparator`。这两种接口各有优势,适用于不同的场景。本文将深入探讨这两种接口的区别及其应用场景,帮助读者更好地理解它们的工作...
2. **实现方式**:`Comparable`是通过类实现接口,而`Comparator`是在排序时创建和传递一个新的比较器实例。 3. **通用性**:`Comparator`更通用,可以用于任何类型的对象,而`Comparable`通常与特定类绑定。 4. **...
首先,`Comparable`接口位于`java.lang`包下,它定义了一个`compareTo()`方法,用于比较当前对象与另一个对象的大小。任何类如果需要自定义排序规则,只需实现这个接口并重写`compareTo()`方法。例如,`String`、`...
Comparator接口位于`java.util`包下,用于提供一种外部比较的方式,即不改变对象本身,而是通过一个专门的比较器对象来决定两个对象的大小关系。这种设计模式被称为策略模式,它可以灵活地改变对象的排序策略。 当...
Comparator是一个独立于待排序对象的比较器,它不修改待排序类的源代码,而是提供了一个独立的比较逻辑。我们创建一个PersonComparator类,实现Comparator接口: ```java public class PersonComparator implements...
2. **Comparator接口**:与`Comparable`不同,`Comparator`接口提供了更多的灵活性。当类没有实现`Comparable`或需要自定义排序规则时,可以使用`Comparator`。`Comparator`有一个`compare()`方法,用于比较两个对象...
例如,下面是一个实现 Comparator 接口的整数比较器,根据整数的大小进行降序排序: ```java import java.util.*; public class CompareController1 implements Comparator<Integer> { @Override public int ...
Java Comparable及Comparator接口区别...Comparable 接口需要类自己实现 compareTo 方法,而 Comparator 接口需要单独定义一个比较器实现 compare 方法。Comparator 接口相对于 Comparable 来说更加灵活,耦合度低。
Java中的比较器主要涉及到两种接口:Comparable接口和Comparator接口,它们在处理对象排序时起着关键作用。 **Comparable接口** Comparable接口是Java.lang包下的一个接口,它只有一个方法:compareTo(T o)。当一个...
在Java编程语言中,`DynamicComparator`是一种实现比较器(Comparator)的方式,它允许在运行时根据特定条件来比较对象。这种技术对于处理多种比较逻辑或者需要灵活改变比较规则的场景非常有用。本文将深入探讨Java...
为了简化这个过程,Java提供了一种机制,即“比较器”(Comparator),它允许我们自定义对象的比较规则。本文将深入探讨Java中通用比较类的概念、实现方式以及它们在实际编程中的应用。 1. **比较器接口...
在标题"Comparator:比较器Java"中提到的Comparator,是Java Collections Framework的一部分,主要用于对集合中的元素进行定制化排序。这个接口定义了一个方法compare(),通过实现这个方法,我们可以指定如何比较两个...