English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

La diferencia entre Comparable y Comparator en Java

Ambos Comparator y Comparable son interfaces que se pueden usar para ordenar elementos de conjuntos. La interfaz Comparator pertenece al paquete java.util, mientras que la interfaz Comparable pertenece al paquete java.lang. La interfaz Comparator ordena la colección proporcionada con los dos objetos proporcionados, mientras que la interfaz Comparable compara el objeto proporcionado con el "this" proporcionado. 

NúmeroClaveComparableComparator
1Método
La interfaz Comparable tiene el método compareTo(Object a) 
El Comparator tiene un compare(Object o1,Object O2Método 
2
Uso de ordenación 
El método Collection.sort(List) se puede usar para ordenar conjuntos de objetos de tipo Comparable.
El método Collection.sort(List, Comparator) se puede usar para ordenar conjuntos de objetos de tipo Comparator.
 3
Orden de clasificación 
La comparabilidad proporciona una única secuencia de ordenación.
El Comparator proporciona múltiples secuencias de ordenación.
4
Paquete 
La interfaz Comparable pertenece al paquete java.lang.  
La interfaz Comparator pertenece al paquete java.util.

Ejemplo de Comparable

public class ComparableExample {
   public static void main(String[] args) {
      List<Laptop> laptopList = new ArrayList<>();
      laptopList.add(new Laptop("HCL", 16, 800));
      laptopList.add(new Laptop("Apple", 8, 100));
      laptopList.add(new Laptop("Dell", 4, 600));
      Collections.sort(laptopList);
      for (Laptop lap : laptopList) {
         System.out.println(lap.getRam());
      }
   }
}
public class Laptop implements Comparable<Laptop> {
   String name;
   int ram;
   int price;
   public Laptop(String name, int ram, int price) {
      super();
      this.name = name;
      this.ram = ram;
      this.price = price;
   }
   public String getName() {
      return name;
   }
   public int getRam() {
      return ram;
   }
   public void setRam(int ram) {
      this.ram = ram;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getPrice() {
      return price;
   }
   public void setPrice(int price) {
      this.price = price;
   }
   @Override
   public int compareTo(Laptop o) {
      if (this.ram > o.getRam())
         ; 1else {
      else {
         ; -1else {
      }  
   }
}

Resultado de salida

4
8
16

Comparator ejemplo

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Laptop implements Comparator {
   String name;
   int ram;
   int price;
   public Laptop(String name, int ram, int price) {
      super();
      this.name = name;
      this.ram = ram;
      this.price = price;
   }
   public String getName() {
      return name;
   }
   public int getRam() {
      return ram;
   }
   public void setRam(int ram) {
      this.ram = ram;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getPrice() {
      return price;
   }
   public void setPrice(int price) {
      this.price = price;
   }
   @Override
   public int compare(Laptop o1, Laptop o2) {
      if (o1.getRam() < o2return
         ; -1else {
      .getRam() > o1.getRam()) {2return
         ; 1else {
      }
         return 0;
      }
   }
   public static void main(String[] args) {
      List laptopList = new ArrayList<>();
      laptopList.add(new Laptop("HCL", 16, 800));
      laptopList.add(new Laptop("Apple", 8, 100));
      laptopList.add(new Laptop("Dell", 4, 600));
      Comparator com = (Laptop o1, Laptop o2) -> o1.getName().compareTo(o2.getName());
      Collections.sort(laptopList, com);
      for (Laptop lap : laptopList) {
         System.out.println(lap.getName());
      }
   }
}

Resultado de salida

Apple
Dell
HCL