1.什么是Comparable接口
此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 C 的每一个 e1 和 e2 来说,当且仅当(e1.compareTo((Object)e2) == 0) 与e1.equals((Object)e2) 具有相同的布尔值时,类 C 的自然排序才叫做与 equals 一致 。
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- public class Book implements Comparable{
- /*编写一个类Book,具有name,price,press,author属性.然后创建5个对象放入ArrayList中,并实现按照price大小排序(使用Comparable接口排序),
- 然后遍历ArrayList输出每个Book对象。*/
- private String name;
- private float price;
- private String press;
- private String author;
- //构造方法
- public Book(String name,float price,String press,String author){
- this.name = name;
- this.price = price;
- this.press = press;
- this.author = author;
- System.out.println(name.toString());
- }
- @SuppressWarnings("unchecked")
- public static void main(String[] args){
- List<Book> list = new ArrayList<Book>();
- Book b1=new Book("java1",25f,"不错的书","LY1");
- Book b2=new Book("java2",26f,"不错的书","LY2");
- Book b3=new Book("java3",50f,"不错的书","LY3");
- Book b4=new Book("java4",20f,"不错的书","LY4");
- Book b5=new Book("java5",15f,"不错的书","LY5");
- list.add(b1);
- list.add(b2);
- list.add(b3);
- list.add(b4);
- list.add(b5);
- Collections.sort(list);
- for(int i=0;i<list.size();i++){
- Book book = (Book)list.get(i);
- System.out.println(book);
- }
- }
- //重写
- public int compareTo(Object obj) {
- Book p = (Book)obj;
- if(p.price>this.price){
- return 1;
- }
- else if(p.price<this.price){
- return -1;
- }
- else{
- return 0;
- }
- }
- //重写toString方法
- public String toString(){//这上是重写了本类的toString方法,对系统自带的其它字段的toString方法无效
- return "书名:"+this.name+", 价格:"+this.price+", 说明:"+this.press+", 作者: "+this.author;
- }
- }
- //.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 接口的类可以使用 Arrays.sort() 方法对其对象数组进行排序。 在上面的示例代码中,我们定义了一个 Simple 类,该类实现了 Comparable 接口。Simple 类具有两个属性:age 和 name。我们实现了 ...
java通过Comparable接口实现字符串比较大小排序的简单实例
实现方式:实现Comparable接口需要覆盖compareTo()方法,以便比较两个对象的大小。例如,我们可以在Person类中实现Comparable接口,并覆盖compareTo()方法,以便比较Person类的对象的大小。 实现Comparator接口需要...
在 Java 中,实现 Comparable 接口的类可以使用 Arrays.sort() 或 Collections.sort() 方法对对象列表进行排序。 在本文中,我们将详细介绍如何使用 Comparable 接口对 Java 对象进行排序,包括升序、降序和倒叙...
1.什么是Comparable接口 此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort ...
这篇文章将为大家带来一个使用 Comparable 接口实现自定义排序的示例。 首先,让我们来了解一下 Comparable 接口。Comparable 接口是 Java 中的一个接口,它定义了一个compareTo 方法,该方法用于比较两个对象的...
这里我们将深入探讨Java 8 HashMap如何与Comparable接口结合使用,以及这背后的编程技术和设计原理。 首先,我们了解下Comparable接口。Comparable接口是Java中用于定义对象之间自然顺序的接口,它只有一个方法`...
此外,通过Java的工具类`Collections`和`Arrays`,可以对实现了Comparable接口的对象列表或数组进行自动排序,如使用`Collections.sort()`和`Arrays.sort()`方法。 在Java中,一些预定义的类,如`Integer`、`Double...
此外,Comparable接口的实现通常会影响类的 equals() 和 hashCode() 方法,因为它们之间的关系是:如果两个对象相等(根据 equals()),那么它们的 compareTo() 方法应该返回 0。而Comparator接口则不会影响对象的 ...
本课程重点讲解了`TreeSet`如何实现`Comparable`接口以及如何自定义比较规则。 首先,我们来了解`TreeSet`的基本概念。`TreeSet`内部使用红黑树数据结构存储元素,这使得它的插入、删除和查找操作具有较高的效率,...
这意味着如果你有一个实现了Comparable接口的对象列表(如List),你可以直接使用Collections.sort()或者Arrays.sort()方法对这个列表进行排序。例如,String类就默认实现了Comparable接口,因此可以直接对字符串...
例如,Java中的String、Integer等类都实现了Comparable接口,这使得我们可以直接使用这些对象进行自然顺序的比较。当我们需要按照特定规则对类实例进行排序时,只需要在自定义类中实现Comparable接口,并重写`...
一旦实现了`Comparable`接口,我们就可以直接使用`Collections.sort()`方法对包含此类对象的集合进行排序。 ```java List<UserPo> userList = new ArrayList(); // 填充userList... Collections.sort(userList); ```...
Java中的自然排序是指使用Comparable接口来实现对象的排序,通过重写compareTo方法来控制排序结果。Comparable接口是Java中的一个接口,用于定义对象的自然顺序。它只有一个方法compareTo,用于比较两个对象的顺序。...
在上面的例子中,自定义的student类没有实现Comparable接口,而是使用了Arrays.sort()方法和自定义的Comparator来实现排序。通过重写compareTo()方法,可以根据年龄降序排列student对象: ```java class ...
在Java编程语言中,排序是数据处理中一个非常常见的需求,而`Comparator`和`Comparable`接口则是实现排序的关键工具。这两个接口都是用于比较对象,但它们的应用场景和使用方式有所不同。 首先,`Comparable`接口是...
#### 二、Comparable接口解析 ##### 1. 概念介绍 `Comparable`接口位于`java.lang`包中,它定义了一个单一的方法`compareTo`。这个接口适用于那些具有自然顺序的对象。当一个类实现了`Comparable`接口时,意味着它...
在使用Comparator时,可以定义一个泛型方法,限制传入的类型T必须实现Comparable接口,这样编译器就能确保传递给方法的参数是可比较的。例如,上述的max()方法就是一个泛型方法,它接收两个实现了Comparable接口的...
当一个类实现了Comparable接口,意味着该类的对象具备内在的比较逻辑,可以直接进行比较。例如,我们可以创建一个Person类,让它实现Comparable接口,然后通过对象的年龄属性进行比较: ```java public class ...
创建名为ComparableCircle的类,它继承自Circle类,并实现Comparable接口。画出UML图并实现compareTo方法,使其根据面积比较两个圆。编写一个测试程序求出ComparableCircle对象的两个实例中的较大者。