`
xiaoer_1982
  • 浏览: 1870568 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java6学习笔记33——Java6中Comparable接口的实现和使用

阅读更多

1.什么是Comparable接口

此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 C 的每一个 e1 e2 来说,当且仅当 (e1.compareTo((Object)e2) == 0) e1.equals((Object)e2) 具有相同的布尔值时,类 C 的自然排序才叫做与 equals 一致

2.实现什么方法

int compareTo(T o)

比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”

参数:
o - 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。
3.实例

  1. import java.util.*;
  2. public class EmployeeSortTest{
  3. /**
  4. *@paramargs
  5. */
  6. public static void main(String[]args){
  7. //TODOAuto-generatedmethodstub
  8. Employee[]staff= new Employee[ 3 ];
  9. staff[ 0 ]= new Employee( "harryHacker" , 35000 );
  10. staff[ 1 ]= new Employee( "carlcracke" , 75000 );
  11. staff[ 2 ]= new Employee( "tonyTester" , 38000 );
  12. Arrays.sort(staff); //sort方法可以实现对对象数组排序,但是必须实现 Comparable接口
  13. /*Comparable接口原型为:
  14. *publicinterfaceComparable<T>
  15. *{
  16. *intcompareTo(Tother);//接口的中方法自动属于public方法
  17. *}
  18. */
  19. for (Employeee:staff)
  20. System.out.println( "id=" +e.getId()+ "name=" +e.getName()+
  21. ".salary=" +e.getSalary());
  22. }
  23. }
  24. /*
  25. *因为要实现对Employee对象的排序,所以在Employee类中要实现Comparable接口,
  26. *也就是要实现comepareTo()方法
  27. */
  28. class Employee implements Comparable<Employee>
  29. {
  30. public Employee(Stringn, double s)
  31. {
  32. name=n;
  33. salary=s;
  34. RandomID= new Random();
  35. id=ID.nextInt( 10000000 );
  36. }
  37. public int getId()
  38. {
  39. return id;
  40. }
  41. public StringgetName()
  42. {
  43. return name;
  44. }
  45. public double getSalary()
  46. {
  47. return salary;
  48. }
  49. public void raiseSalary( double byPercent)
  50. {
  51. double raise=salary*byPercent/ 100 ;
  52. salary+=raise;
  53. }
  54. public int compareTo(Employeeother)
  55. {
  56. if (id<other.id) //这里比较的是什么sort方法实现的就是按照此比较的东西从小到大排列
  57. return - 1 ;
  58. if (id>other.id)
  59. return 1 ;
  60. return 0 ;
  61. }
  62. private int id;
  63. private Stringname;
  64. private double salary;
  65. }

4.与Comparator的区别

Comparator位于包java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而后者在一个独立的类中实现比较。 如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,可以通过 Comparator来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。


我们看一个Comparator的例子:

import java.util.TreeSet;
import java.util.Comparator;

class NumComparator implements Comparator<NameTag> {
public int compare (NameTag left,NameTag right) {
return(left.getNumber() - right.getNumber());
}
}

public class CollectionNine {
public static void main(String arg[]) {
new CollectionNine();
}
CollectionNine() {
NumComparator comparator = new NumComparator();
TreeSet<NameTag> set = new TreeSet<NameTag>(comparator);

set.add(new NameTag("Agamemnon",300));
set.add(new NameTag("Cato",400));
set.add(new NameTag("Plato",100));
set.add(new NameTag("Zeno",200));
set.add(new NameTag("Archimedes",500));
for(NameTag tag : set)
System.out.println(tag);
}
}

分享到:
评论

相关推荐

    Comparable接口和Comparator使用示例

    Comparable 接口和 Comparator 使用示例 在 Java 编程语言中,比较和排序是非常...Comparable 接口和 Comparator 都是 Java 中非常重要的比较和排序机制,它们提供了不同的比较和排序方式,分别适用于不同的应用场景。

    Comparable接口实现字符串比较大小排序的简单实例

    java通过Comparable接口实现字符串比较大小排序的简单实例

    java,Comparable接口实例

    一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。” 参数: o - 要比较的对象。 返回: 负整数、零或正整数,根据此...

    comparator接口与Comparable接口的区别

    Comparator接口与Comparable接口是Java语言中两个重要的接口,它们都是用于比较和排序自定义类的对象的大小的。虽然它们两个都是用于比较的接口,但是它们有着不同的实现方式和应用场景。 相同之处:Comparator接口...

    Java8HashMap键与Comparable接口编程开

    当一个类实现了Comparable接口,那么它的实例就可以进行排序,比如在集合框架中使用。 在Java 8的HashMap中,键(Key)通常是不可变的,并且它们通常需要支持排序。例如,当我们想要对HashMap的键进行排序时,可以...

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

    在 Java 中,实现 Comparable 接口的类可以使用 Arrays.sort() 或 Collections.sort() 方法对对象列表进行排序。 在本文中,我们将详细介绍如何使用 Comparable 接口对 Java 对象进行排序,包括升序、降序和倒叙...

    《Java数据结构和算法》学习笔记(3)——栈和队列

    本文将基于《Java数据结构和算法》学习笔记中的“栈和队列”部分进行深入探讨。 栈(Stack)是一种线性数据结构,遵循后进先出(LIFO, Last In First Out)的原则。在栈中,元素的添加(压栈)和移除(弹栈)都是在...

    java私塾学习笔记整理

    ### Java私塾学习笔记整理 #### 第一章:Java入门 **一、Java是什么?** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年推出。它旨在为跨平台开发提供一种通用的语言环境,使开发者能够在任何...

    java中实现Comparable接口实现自定义排序的示例

    "java中的自定义排序实现" 在 Java 中实现自定义排序的需求是非常...这篇文章向大家展示了如何使用 Comparable 接口实现自定义排序的示例,这将有助于大家更好地理解 Java 中的排序机制,并更好地应用于实际开发中。

    java中Comparable和Comparator的区别

    在Java编程语言中,Comparable和Comparator接口是两个重要的概念,它们都用于对象的排序,但有着不同的使用场景和特点。本文将深入探讨这两个接口的区别,以及它们在实际开发中的应用。 首先,我们来了解一下...

    学习笔记 java\CoreJava笔记\CoreJava_day12

    在Java编程语言中,SortedSet接口是Set接口的一个子接口,它添加了对集合元素排序的能力。SortedSet接口要求其实现类必须维护元素的排序顺序,这种顺序可以是元素的自然顺序(即元素自身可比较),也可以是通过提供...

    Java中Comparable和Comparator的区别

    在Java编程语言中,Comparable和Comparator接口是两个非常重要的组件,它们主要用来进行对象的比较和排序。了解它们之间的区别对于提升代码的可维护性和灵活性至关重要。 Comparable接口来源于java.lang包,它定义...

    Java学习笔记接口包装类

    在Java编程语言中,接口(Interface)和包装类(Wrapper Class)是两个核心概念,它们在实际开发中扮演着至关重要的角色。接口提供了一种定义规范的方式,而包装类则是基本数据类型与对象世界之间的桥梁。现在让我们...

    java排序Comparator和Comparable

    在Java编程语言中,排序是数据处理中一个非常常见的需求,而`Comparator`和`Comparable`接口则是实现排序的关键工具。这两个接口都是用于比较对象,但它们的应用场景和使用方式有所不同。 首先,`Comparable`接口是...

    Java5.0学习笔记

    泛型通过在类、接口和方法声明中使用类型参数来实现,可以避免运行时的强制类型转换,并确保集合中的元素类型一致。 2. **枚举类型**:Java 5.0添加了枚举类型,使得枚举常量更加规范和易于管理。枚举可以看作是一...

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

    在Java编程语言中,排序是常见的操作,而`Comparable`和`Comparator`接口则是实现对象排序的两种主要方式。这篇文章将深入探讨这两种实现方式及其在实际编程中的应用。 首先,`Comparable`接口位于`java.lang`包下...

    浅析Java中comparator接口与Comparable接口的区别

    在Java编程语言中,Comparable和Comparator接口都用于比较对象,但它们之间存在一些关键区别,这对于理解和优化代码的可扩展性至关重要。 首先,Comparable接口是一个排序接口,它定义了一个单一的方法`compareTo(T...

    高手总结Java初学者学习经验笔记整理

    Java集合框架是Java标准库中的一个重要组成部分,它提供了一组接口和实现类来处理各种数据结构,比如列表、集合和映射等。这些数据结构允许程序员以一种结构化的方式存储和操作对象。 #### 二、集合框架接口的分类 ...

Global site tag (gtag.js) - Google Analytics