`
yangyangmyself
  • 浏览: 233829 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Comparable interface

    博客分类:
  • Java
阅读更多
     如果要比较两个对象则Comparable接口很实用,虽然还有另一个接口Comparator,但我们现在只介绍接口Comparable用法。比较两个对象先要实现接口Comparable,并且实现compareTo方法,建议compareTo与equals比较规则一样。compareTo方法定义,查看API文档(文档已详细说明),实例结合java.util.Arrays.sort()方法。下面提供实例说明:
package cn.lang;

/**
 * <li>当且仅当 e1.compareTo(e2) == 0 与 e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致
 * null 不是任何类的实例,即使 e.equals(null) 返回 false,e.compareTo(null) 也将抛出 NullPointerException。</li>
 * <li>建议(虽然不是必需的)最好使自然排序与 equals 一致。这是因为在使用自然排序与 equals 不一致的元素(或键)时,
 * 没有显式比较器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)
 * 违背了根据 equals 方法定义的集合(或映射表)的常规协定。</li>
 * <li>实际上,所有实现 Comparable 的 Java 核心类都具有与 equals 一致的自然排序。
 * java.math.BigDecimal 是个例外,它的自然排序将值相等但精确度不同的 BigDecimal 对象(比如 4.0 和 4.00)视为相等。</li>
 * @author Administrator
 * @since 2011-12-26
 *
 */
class Person implements Comparable<Person>{
	
	private String name;
	private int age ;
	private String school ;
	
	public Person(String name,int age,String school){
		this.name = name ;
		this.age = age ;
		this.school = school ;
	}
	@Override
	public int compareTo(Person t){
		try{
			if(t==null) throw new Exception("对象不能为空!");
		}catch(Exception e){
			System.out.println(this.getClass().getName()+"异常信息:"+e.getMessage());
		}
		if(this.age>t.age){
			return -1 ;
		}else if(this.age<t.age){
			return 1;
		}else{
			return 0 ;
		}
	}
	@Override
	public boolean equals(Object o){
		if(this == o) return true;
		if(!(o instanceof Person)) return false;
		Person p = (Person)o ;
		if(this.age==p.age){
			return true;
		}else{
			return false;
		}
	}
	@Override
	public String toString(){
		return "姓名:"+this.name+"、年龄:"+this.age+"、学校:"+this.school ;
	}
}
public class ComparableDemo01{
	/**
	 * 测试
	 * @param args
	 */
	public static void main(String[] args) {
		Person p1 = new Person("张三",10,"学校一");
		Person p2 = new Person("李四",15,"学校二");
		Person p3 = new Person("王五",8,"学校三");
		Person p4 = new Person("小李",6,"学校四");
		Person p5 = new Person("小二",16,"学校五");
		Person p[] = {p1,p2,p3,p4,p5};
		System.out.println("排序前:");
		for(Person person:p){
			System.out.println(person);
		}
		java.util.Arrays.sort(p);
		System.out.println("排序后:");
		for(Person person:p){
			System.out.println(person);
		}
	}
}



package com.yy.basic;

import java.util.Set;
import java.util.TreeSet;

public class Student implements Comparable<Student>{
	
	private int id ;
	
	private String name ;
	
	private String school ;
	
	public Student(int id, String name, String school){
		this.id = id ;
		this.name = name ; 
		this.school = school ;
	}
	
	@Override
	public int compareTo(Student o) {
		int result = 0;
		result = id > o.id ? 1 : (id == o.id ? 0 : -1);
		if(result==0){
			result = name.compareTo(o.name);
		}
		return result ;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(this == obj){
			return true ;
		}
		if(obj instanceof Student){
			Student student = (Student) obj;
			if(this.id == student.id && this.name.equals(student.name) ){
				return true ;
			}
		}
		return false;
	}
	
	@Override
	public int hashCode() {
		return id + this.name.hashCode();
	}

	@Override
	public String toString() {
		
		return this.id + "_" + this.name + "_" + this.school;
	}

	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;
	}

	public String getSchool() {
		return school;
	}

	public void setSchool(String school) {
		this.school = school;
	}
	public static void main(String[] args) {
		Set<Student> set = new TreeSet<Student>();
		set.add(new Student(1,"oy","zh"));
		set.add(new Student(2,"oy","zh"));
		set.add(new Student(1,"o1","zh"));
		set.add(new Student(4,"oy","zh"));
		set.add(new Student(3,"oy","zh"));
		System.out.println(set);
	}
}

分享到:
评论

相关推荐

    interfaceComparable

    在Java编程语言中,`interface Comparable` 是一个非常重要的接口,它定义了比较对象的通用方法,使得对象之间可以进行排序。这个接口是Java Collections Framework(集合框架)的基础部分,对于实现排序和比较操作...

    精品资料(2021-2022年收藏)面向对象技术Java期末复习试卷五.doc

    6. **Comparable接口与排序(Comparable Interface and Sorting)**: - `GeometricObject`类实现了`Comparable&lt;GeometricObject&gt;`接口,意味着它可以比较自身与其他`GeometricObject`对象,这里比较的是周长。 - ...

    java教学基础系列一

    * The binary search tree class is an example of generic programming because you can use it with any classes that implement the Comparable interface. * Does it achieve genericity through inheritance or...

    comparable和compartor区别

    public interface Comparable&lt;T&gt; { int compareTo(T o); } ``` 其中`T`表示实现此接口的类本身。`compareTo`方法用于比较当前对象与另一个对象,返回值为: - 负整数:表示当前对象小于另一个对象。 - 零:表示两个...

    ArrayApp:数据结构

    `ArrayApp` 是一个专注于数据结构的程序,它演示了如何在Java编程语言中使用和操作数组,同时也展示了如何实现可比较接口(Comparable interface)及其相关的方法。数据结构是计算机科学中的核心概念,它涉及到如何...

    go代码-方法定义与使用

    type Comparable interface { Less(other Comparable) bool Equal(other Comparable) bool } type MyComparable struct { value int } func (m MyComparable) Less(other Comparable) bool { return m.value ...

    用Java集合中的Collections.sort方法如何对list排序(两种方法)

    // No need to implement Comparable interface private String name; private Integer order; // getters and setters... } public class Test { public static void main(String[] args) { User user1 = ...

    Go语言中的方法定义用法分析

    type Comparable interface { Compare(other comparable) int } func (f MyFloat) Compare(other MyFloat) int { // 实现Compare方法 } ``` 这样,`MyFloat`类型就实现了`Comparable`接口,可以与其他实现...

    java 实现Comparable接口排序,升序、降序、倒叙

    public interface Comparable&lt;T&gt; { int compareTo(T o); } ``` 可以看到,Comparable 接口只有一个方法 compareTo,它的参数类型是泛型 T,表示要比较的对象。compareTo 方法返回一个整数值,表示当前对象与参数...

    Java中Comparable和Comparator 2种实现方式学习

    public interface Comparable&lt;T&gt; { int compareTo(T o); } ``` 当你创建一个类并希望其对象能够在集合如`ArrayList`或`TreeSet`中自动排序时,只需让该类实现`Comparable`接口。例如,如果你有一个`Person`类,你...

    Java中interface接口的作用

    在Java编程语言中,接口(Interface)是一种非常重要的特性,它扮演着定义行为规范的关键角色。接口是完全抽象的类型,允许我们定义一组方法签名,但不提供具体实现。这使得接口成为实现多继承的手段,因为Java不...

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

    public interface Comparable&lt;T&gt; { public int compareTo(T o); } ``` compareTo 函数用来比较两个对象的大小,返回负数意味着第一个对象小于第二个对象,返回零意味着两个对象相等,返回正数意味着第一个对象大于...

    492.490.JAVA基础教程_常用类-自定义类实现Comparable自然排序(492).rar

    public interface Comparable&lt;T&gt; { int compareTo(T o); } ``` **compareTo()方法** `compareTo`方法返回一个整数值,表示当前对象与传入的对象`o`之间的相对大小。如果当前对象大于`o`,则返回正数;如果两者...

    java_interface_instance.rar_interface

    在Java编程语言中,接口(Interface)是一种非常重要的概念,它体现了面向对象设计的原则,提供了多继承机制。本文将深入探讨Java接口实例及其在实际应用中的作用。 首先,我们需要理解接口的基本定义。Java接口是...

    Comparable接口和Comparator接口的比较

    public interface Comparable&lt;T&gt; { int compareTo(T o); } ``` compareTo()方法的返回值定义了两个对象的相对顺序: - 如果返回值小于0,表示当前对象小于指定对象。 - 返回值等于0,表示两者相等。 - 返回值大于0...

    Delayed interface and Delay Queue

    标题 "Delayed interface and Delay Queue" 涉及到Java并发编程中的两个重要概念:Delayed接口和DelayQueue。这篇博文可能是作者Tomboxfan在iteye博客上分享关于这两个概念的深入理解和应用实例。 Delayed接口是...

    java比较器.md

    public interface Comparable&lt;T&gt; { int compareTo(T o); } ``` 这里 `T` 表示实现此接口的类的类型。 ##### 2.2 `compareTo()` 方法的实现 `compareTo()` 方法的返回值是一个整数值,表示调用对象与参数对象之间...

    java 泛型接口示例

    public void processComparable(GenericInterface&lt;? extends Comparable&lt;?&gt;&gt; gi) { // 使用具有边界通配符的方法调用 } ``` 7. **类型推断** 自Java 7开始,编译器支持类型推断,这使得在很多情况下,我们不...

    64_interface_atividade_explicada

    例如,一个类可以同时实现`Comparable`和`Serializable`接口,使其既能比较又能序列化。 在这个"64_interface_atividade_explicada"活动中,你可能需要完成以下任务: - 理解接口的基本概念和作用。 - 创建并实现...

Global site tag (gtag.js) - Google Analytics