`

Comparable接口实现和使用方法

 
阅读更多

1.什么是Comparable接口

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

Java代码  收藏代码
  1. import java.util.ArrayList;  
  2. import java.util.Collections;  
  3. import java.util.List;  
  4. public class Book implements Comparable{  
  5. /*编写一个类Book,具有name,price,press,author属性.然后创建5个对象放入ArrayList中,并实现按照price大小排序(使用Comparable接口排序), 
  6.    然后遍历ArrayList输出每个Book对象。*/  
  7. private String name;  
  8. private float price;  
  9. private String press;  
  10. private String author;  
  11.   
  12. //构造方法  
  13. public Book(String name,float price,String press,String author){  
  14.    this.name = name;  
  15.    this.price = price;  
  16.    this.press = press;  
  17.    this.author = author;  
  18.    System.out.println(name.toString());  
  19. }  
  20. @SuppressWarnings("unchecked")  
  21. public static void main(String[] args){  
  22.    List<Book> list = new ArrayList<Book>();  
  23.    Book b1=new Book("java1",25f,"不错的书","LY1");  
  24.    Book b2=new Book("java2",26f,"不错的书","LY2");  
  25.    Book b3=new Book("java3",50f,"不错的书","LY3");  
  26.    Book b4=new Book("java4",20f,"不错的书","LY4");  
  27.    Book b5=new Book("java5",15f,"不错的书","LY5");  
  28.    list.add(b1);  
  29.    list.add(b2);  
  30.    list.add(b3);  
  31.    list.add(b4);  
  32.    list.add(b5);  
  33.    Collections.sort(list);  
  34.    for(int i=0;i<list.size();i++){  
  35.     Book book = (Book)list.get(i);  
  36.     System.out.println(book);  
  37.    }  
  38. }  
  39.    //重写  
  40. public int compareTo(Object obj) {  
  41.       Book p = (Book)obj;  
  42.       if(p.price>this.price){  
  43.      return 1;  
  44.       }  
  45.       else if(p.price<this.price){  
  46.      return -1;  
  47.       }  
  48.       else{  
  49.           return 0;  
  50.       }  
  51. }  
  52. //重写toString方法  
  53. public String toString(){//这上是重写了本类的toString方法,对系统自带的其它字段的toString方法无效  
  54.      return "书名:"+this.name+", 价格:"+this.price+", 说明:"+this.press+", 作者: "+this.author;  
  55.      }  
  56. }  
  57. //.sort(List)方法,当然还可能使用java.util.Arrays.sort(数组),那样就必须把//list转化为数组,由于本例使用Collections.sort(List)已经足够,另一方法,大家可//以尝试自已使用.  

2.与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 接口的类可以使用 Arrays.sort() 方法对其对象数组进行排序。 在上面的示例代码中,我们定义了一个 Simple 类,该类实现了 Comparable 接口。Simple 类具有两个属性:age 和 name。我们实现了 ...

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

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

    comparator接口与Comparable接口的区别

    实现方式:实现Comparable接口需要覆盖compareTo()方法,以便比较两个对象的大小。例如,我们可以在Person类中实现Comparable接口,并覆盖compareTo()方法,以便比较Person类的对象的大小。 实现Comparator接口需要...

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

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

    java,Comparable接口实例

    1.什么是Comparable接口 此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort ...

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

    这篇文章将为大家带来一个使用 Comparable 接口实现自定义排序的示例。 首先,让我们来了解一下 Comparable 接口。Comparable 接口是 Java 中的一个接口,它定义了一个compareTo 方法,该方法用于比较两个对象的...

    Java8HashMap键与Comparable接口编程开

    这里我们将深入探讨Java 8 HashMap如何与Comparable接口结合使用,以及这背后的编程技术和设计原理。 首先,我们了解下Comparable接口。Comparable接口是Java中用于定义对象之间自然顺序的接口,它只有一个方法`...

    推选Comparable自比较接口PPT资料.pptx

    此外,通过Java的工具类`Collections`和`Arrays`,可以对实现了Comparable接口的对象列表或数组进行自动排序,如使用`Collections.sort()`和`Arrays.sort()`方法。 在Java中,一些预定义的类,如`Integer`、`Double...

    java中Comparable和Comparator的区别

    此外,Comparable接口的实现通常会影响类的 equals() 和 hashCode() 方法,因为它们之间的关系是:如果两个对象相等(根据 equals()),那么它们的 compareTo() 方法应该返回 0。而Comparator接口则不会影响对象的 ...

    【IT十八掌徐培成】Java基础第12天-02.TreeSet实现与Comparable接口.zip

    本课程重点讲解了`TreeSet`如何实现`Comparable`接口以及如何自定义比较规则。 首先,我们来了解`TreeSet`的基本概念。`TreeSet`内部使用红黑树数据结构存储元素,这使得它的插入、删除和查找操作具有较高的效率,...

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

    这意味着如果你有一个实现了Comparable接口的对象列表(如List),你可以直接使用Collections.sort()或者Arrays.sort()方法对这个列表进行排序。例如,String类就默认实现了Comparable接口,因此可以直接对字符串...

    Java中Comparable和Comparator的区别

    例如,Java中的String、Integer等类都实现了Comparable接口,这使得我们可以直接使用这些对象进行自然顺序的比较。当我们需要按照特定规则对类实例进行排序时,只需要在自定义类中实现Comparable接口,并重写`...

    comparable和compartor区别

    一旦实现了`Comparable`接口,我们就可以直接使用`Collections.sort()`方法对包含此类对象的集合进行排序。 ```java List&lt;UserPo&gt; userList = new ArrayList(); // 填充userList... Collections.sort(userList); ```...

    Java自然排序Comparable使用方法解析

    Java中的自然排序是指使用Comparable接口来实现对象的排序,通过重写compareTo方法来控制排序结果。Comparable接口是Java中的一个接口,用于定义对象的自然顺序。它只有一个方法compareTo,用于比较两个对象的顺序。...

    Comparable接口和Comparator接口的比较

    在上面的例子中,自定义的student类没有实现Comparable接口,而是使用了Arrays.sort()方法和自定义的Comparator来实现排序。通过重写compareTo()方法,可以根据年龄降序排列student对象: ```java class ...

    java排序Comparator和Comparable

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

    Comparable&Comparator区别

    #### 二、Comparable接口解析 ##### 1. 概念介绍 `Comparable`接口位于`java.lang`包中,它定义了一个单一的方法`compareTo`。这个接口适用于那些具有自然顺序的对象。当一个类实现了`Comparable`接口时,意味着它...

    对比Java中的Comparable排序接口和Comparator比较器接口

    在使用Comparator时,可以定义一个泛型方法,限制传入的类型T必须实现Comparable接口,这样编译器就能确保传递给方法的参数是可比较的。例如,上述的max()方法就是一个泛型方法,它接收两个实现了Comparable接口的...

    Comparable和Comparator区分1

    当一个类实现了Comparable接口,意味着该类的对象具备内在的比较逻辑,可以直接进行比较。例如,我们可以创建一个Person类,让它实现Comparable接口,然后通过对象的年龄属性进行比较: ```java public class ...

    ComparableCircle类

    创建名为ComparableCircle的类,它继承自Circle类,并实现Comparable接口。画出UML图并实现compareTo方法,使其根据面积比较两个圆。编写一个测试程序求出ComparableCircle对象的两个实例中的较大者。

Global site tag (gtag.js) - Google Analytics