`

Java Comparable(lang) Comparator(util)对比

    博客分类:
  • java
 
阅读更多
java.lang.Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String  Integer自己就可以完成比较大小操作)即对象必须实现这个接口Comparable比较用的方法是Arrays.sort(对象数组)。Comparable而是需要对象实现Comparable<对象>
   
java.util.Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。Comparator比较用的方法是Collections.sort(list, new Comparator());Comparator需要自己写一个比较类。

compareTo和compare方法返回1则表示需要交换 -1则不需要交换

package test.Compare;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class CompareTest {
	public static void main(String[] args) {
		List<PersonA> list = new ArrayList<PersonA>();
		PersonA p1 = new PersonA(23);
		list.add(p1);
		PersonA p2 = new PersonA(21);
		list.add(p2);
		PersonA p3 = new PersonA(29);
		list.add(p3);
		Object pArr[] = list.toArray();
		Arrays.sort(pArr);
		for (Object v : pArr) {
			System.out.println(v);
		}
		List<PersonB> list1 = new ArrayList<PersonB>();
		PersonB p4 = new PersonB(23);
		list1.add(p4);
		PersonB p5 = new PersonB(21);
		list1.add(p5);
		PersonB p6 = new PersonB(29);
		list1.add(p6);
		//从小到大顺序
        Collections.sort(list1, new SortPersonBAge());
        for (PersonB v : list1) {
			System.out.println(v);
		}
        //从大到小
        Collections.reverse(list1);
        for (PersonB v : list1) {
			System.out.println(v);
		}
	}
};

// Comparable是java.lang包里面的Arrays.sort(pArr);
class PersonA implements Comparable<PersonA> {
	private int age;

	public PersonA(int age) {
		super();
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public int compareTo(PersonA o) {
		if (this.age > o.getAge())
			return 1;
		else if (this.age < o.getAge())
			return -1;
		return 0;
	}

	@Override
	public String toString() {
		return this.age + " ";
	}
}


class PersonB {
	private int age;

	public PersonB(int age) {
		super();
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return this.age + " ";
	}
}
//Comparable Comparator是java.util包体里面的
class SortPersonBAge implements Comparator<PersonB> {
	
	@Override
	public int compare(PersonB o1, PersonB o2) {
		if (o1.getAge()>o2.getAge()) {
			return 1;
		} else if (o1.getAge()<o2.getAge()) {
			return -1;
		}
		return 0;
	}
};
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Java Comparable和Comparator对比详解

    Java Comparable和Comparator对比详解 Java 中的 Comparable 和 Comparator 是两个常用的接口,用于实现对象的比较和排序。它们都是 Java 中的接口,都是用于比较对象的大小的,但它们有所不同。 Comparable 接口 ...

    java中Comparable和Comparator的区别

    Comparable接口位于java.lang包中,它只有一个方法:compareTo(Object o)。任何实现了Comparable接口的类,其实例都可以进行自然排序。自然排序指的是根据类的业务逻辑定义的排序规则。例如,String类就实现了...

    Java中Comparable和Comparator的区别

    Comparable接口来源于java.lang包,它定义了一个方法`compareTo(T o)`。任何类如果实现了Comparable接口,就表明这个类的对象可以相互比较大小。例如,Java中的String、Integer等类都实现了Comparable接口,这使得...

    Comparable&Comparator区别

    import java.util.Comparator; public class CustomerComparator implements Comparator&lt;Customer&gt; { @Override public int compare(Customer c1, Customer c2) { // 首先比较年龄 if (c1.getAge() ()) return ...

    java排序Comparator和Comparable

    首先,`Comparable`接口是Java.lang包下的一个接口,它只有一个方法`compareTo(T o)`。任何类如果想要实现自然排序,即按照类定义的规则进行排序,都可以实现这个接口。例如,`String`类就实现了`Comparable`接口,...

    详解Java中Comparable和Comparator接口的区别

    Java 中的 Comparable 和 Comparator 接口详解 Java 中的 Comparable 和 Comparator 接口都是用于比较和排序的,但是它们之间存在着一些关键的区别。Comparable 是一个排序接口,若一个类实现了 Comparable 接口,...

    Comparable与Comparator的区别Java开

    首先,`Comparable`接口位于`java.lang`包下,它定义了一个`compareTo()`方法,这个方法用于比较对象之间的自然顺序。如果一个类的实例需要参与排序,那么该类通常会实现`Comparable`接口。例如,`String`类就实现了...

    Comparable与Comparator的区别

    Comparable接口位于`java.lang`包下,它是一个对象自比较的接口。任何类如果需要进行排序,可以实现Comparable接口。例如,String、Integer等内置类已经实现了Comparable接口,可以方便地进行大小比较。当我们自定义...

    java 中Comparable与Comparator详解与比较

    Comparable接口定义在`java.lang`包中,它只有一个方法`compareTo(T o)`,用于比较当前对象与另一个对象的大小。当一个类实现了Comparable接口,意味着类的实例可以被自然排序,无需额外的比较器。例如,String类就...

    Java Comparable及Comparator接口区别详解

    Comparable 接口位于 java.lang 包下面,里面只有一个 compareTo(T) 方法。当一个类需要比较的时候,需要自行实现 Comparable 接口的 compareTo 方法。当调用集合排序方法的时候,就会调用对象的 compareTo() 方法来...

    Java SE编程入门教程 java泛型(共11页).pptx

    - `java.util.Comparator`和`java.lang.Comparable`:用于对象之间的比较。 这些主题共同构成了Java SE的基础,是理解和开发Java应用程序的关键。通过学习这些概念,开发者能够创建安全、高效和可维护的代码。

    Java对象的比较方式.pdf

    Comparable接口是Java.lang包中的一个接口,提供了一个自然排序方式。该接口适用于一个类有自然顺序,例如String和Integer等Java内建类。实现Comparable接口需要实现compareTo(Object o)方法,该方法比较当前实例...

    JAVA-V2-Interfaces-Comparable-y-Comparator

    首先,`Comparable`接口位于`java.lang`包中,它只有一个方法`compareTo(T o)`。任何类如果实现了`Comparable`接口,就表明该类的对象可以进行自然排序。所谓自然排序,是指根据类中定义的逻辑来决定对象之间的顺序...

    Java_api查看.rar

    - `Comparable`和`Comparator`接口常用于排序操作,实现了这两个接口的对象可以进行比较。 5. **异常处理**: - Java使用异常处理机制来处理运行时错误。异常类位于`java.lang.Throwable`及其子类,如`...

    Java对象的比较方式.doc

    首先,`Comparable`接口是Java的`java.lang`包中的一个基础接口,它的目的是为那些具有自然排序顺序的类提供一种排序机制。例如,`String`和`Integer`类都实现了`Comparable`接口,因此我们可以直接比较字符串或整数...

    Comparable.pdf

    首先,`Comparable`接口是Java的核心API,位于`java.lang`包下。它的主要目的是提供一种方式,使得对象可以自我比较并确定它们之间的顺序。当你想要对一个对象类型的集合(如数组或列表)进行自然排序时,你可以让这...

    java华为面试题

    【Java 华为面试题详解】 ... - 包:java.util, java.io, java.lang, java.awt, java.net - 接口:Runnable, Comparable, Comparator, Cloneable, Serializable 7. **ArrayList, Vector, ArrayLink

    ArraySort排序

    对于数组中的元素类型本身支持比较(如`Integer`, `String`等),我们可以通过让类实现`java.lang.Comparable`接口来直接排序。`Comparable`接口同样有一个`compareTo()`方法,但它是类的成员方法,用于定义类实例...

    JavaAPI超全

    - 接口与实现:Iterable、Iterator、Comparable、Comparator,这些接口在处理集合时经常用到。 3. **并发处理API**: - `java.util.concurrent`包:提供了线程池、并发容器、同步工具类,如ExecutorService、...

Global site tag (gtag.js) - Google Analytics