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

الفرق بين Comparable و Comparator في Java

المقارن والمقارن هما واجهات يمكن استخدامها لترتيب عناصر مجموعة. واجهة المقارن تنتمي إلى حزمة java.util، بينما تنتمي واجهة القابلية إلى حزمة java.lang. تستخدم واجهة المقارن مجموعة العناصر التي يتم توفيرها لها لترتيب المجموعة، بينما تقارن واجهة القابلية العنصر المقدم لها. 

الترقيمالمفتاحالقابليةالمقارن
1الدوال
والقابلية لديها دالة compareTo(Object a) 
مقارن لديه دالة compare(Object o1،Object O2) 
2
استخدام الترتيب 
يمكن استخدام طريقة Collection.sort(List) لترتيب مجموعة من العناصر من نوع Comparable.
يمكن استخدام طريقة Collection.sort(List,Comparator) لترتيب مجموعة من العناصر من نوع Comparator.
 3
ترتيب السلسلة 
القابلية توفر سلسلة ترتيب واحدة.
المقارن يقدم عدة سلاسل ترتيب.
4
الحزمة 
واجهة قابلية المستوردة من حزمة java.lang.  
مستورد من حزمة java.util.

مثال على 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

مثال على 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