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

Java中Comparable和Comparator之间的区别

Entrambi Comparator e Comparable sono interfacce utilizzabili per ordinare gli elementi di una collezione. L'interfaccia Comparator appartiene al pacchetto java.util, mentre l'interfaccia Comparable appartiene al pacchetto java.lang. L'interfaccia Comparator utilizza due oggetti forniti per ordinare la raccolta, mentre l'interfaccia Comparable confronta 'this' con l'oggetto fornito. 

NumeroChiaveComparableComparator
1Metodo
L'interfaccia Comparable ha il metodo compareTo(Object a) 
L'interfaccia Comparator ha il metodo compare(Object o1, Object O2) 
2
Uso dell'ordinamento 
Il metodo Collection.sort(List) può essere utilizzato per ordinare una collezione di oggetti di tipo Comparable.
Il metodo Collection.sort(List, Comparator) può essere utilizzato per ordinare una collezione di oggetti di tipo Comparator.
 3
Ordine di sortita 
La comparabilità offre una singola sequenza di ordinamento.
L'interfaccia Comparator offre più sequenze di ordinamento.
4
Pacchetto 
L'interfaccia Comparable appartiene al pacchetto java.lang.  
L'interfaccia Comparator appartiene al pacchetto java.util.

Esempio di 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())
         return 1;
      else {
         return -1;
      }  
   }
}

输出结果

4
8
16

Esempio di Comparator

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() < o2.getRam()) {
         return -1;
      } else if (o1.getRam() > o2.getRam()) {
         return 1;
      } else {
         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());
      }
   }
}

输出结果

Apple
Dell
HCL