comparable comparator interfaces java
Bu öğretici, Java'da Karşılaştırılabilir ve Karşılaştırıcı Arabirimler kavramını örneklerle açıklamaktadır. Ayrıca ikisi arasındaki farkları da öğreneceksiniz:
Önceki eğitimlerimizde arayüzler hakkında her şeyi öğrendik. Soyut yöntemleri ve statik veya son değişkenleri bildirmek için bir arayüz kullanılır. Varsayılan olarak, arayüz yöntemleri herkese açıktır. Java 8'den beri, arayüzler de statik ve varsayılan yöntemlere tanımlanmış olabilir.
Java, çeşitli işlemleri gerçekleştirmek için kullanabileceğimiz çeşitli yerleşik arabirimler sağlar. Bu eğiticide, Karşılaştırılabilir ve Karşılaştırıcı gibi iki tür arabirimi tartışacağız. Doğal sıralamaya göre nesneyi sıralamak için karşılaştırılabilir bir arayüz kullanılır. Karşılaştırıcı arayüzü, çeşitli nesnelerin bireysel niteliklerini sıralamak için kullanılır.
=> Basit Java Eğitim Serisini Buradan Keşfedin.
Karşılaştırılabilir bir arayüzle başlayalım.
Ne öğreneceksin:
- Java'da Karşılaştırılabilir Arayüz
- Java'da Karşılaştırıcı Arayüzü
- Karşılaştırılabilir Vs Karşılaştırıcı Arasındaki Fark
- Sonuç
Java'da Karşılaştırılabilir Arayüz
Karşılaştırılabilir arabirim, özel nesneler içeren Diziler ve Dizi Listeleri gibi liste yapılarını sıralar. Liste nesneleri Comparable arabirimini uyguladıktan sonra, içeriği sıralamak için diziler olması durumunda Collections.sort () yöntemini veya Arrays.sort () kullanabiliriz.
Ancak özel sınıflarımız olduğunda ve nesnelerini sıralamamız gerektiğinde, bu sınıfta Comparable arayüzünü uygulamamız gerekecek. Karşılaştırılabilir arayüz, java.lang paketi. Bu arayüzün yalnızca bir yöntemi vardır, CompareTo (). Karşılaştırılabilir bir arayüz kullanarak, bir seferde tek bir veri üyesini sıralayabiliriz.
Örneğin, Sınıfımızda alanlar olarak ad ve yaşımız varsa, o zaman bir seferde sınıf nesnelerini ada veya yaşa göre sıralayabiliriz. Aynı anda hem isim hem de yaşa göre sıralama yapamayız.
Yukarıda açıklandığı gibi, Karşılaştırılabilir arayüzü uygulamak için özel bir sınıfa sahip olarak Karşılaştırılabilir arayüzü Java'da uygulayabiliriz. Comparable arayüzünde, özel nesneleri sıralamak için sınıfta geçersiz kılınması gereken 'CompareTo' tek bir yöntem vardır.
'CompareTo' Yöntemi
Karşılaştırılabilir arayüzün 'CompareTo' yöntemi, mevcut nesneyi verilen nesne ile karşılaştırmak için kullanılır. CompareTo nesnesinin genel sözdizimi aşağıda verilmiştir.
public int CompareTo (Nesne obj)
Yukarıda gösterildiği gibi, CompareTo yöntemi bir nesneyi bağımsız değişken olarak kabul eder (herhangi bir özel nesne olabilir) ve bu yöntemi çağırmak için kullanılan geçerli nesneyle karşılaştırır.
CompareTo yöntemi, aşağıdaki değerlerden birine sahip olabilen bir tamsayı değeri döndürür:
- Pozitif (> 0) tamsayı => geçerli nesne> geçirilen nesne parametresi.
- Negatif (mevcut nesne
- Sıfır (= 0) => geçerli nesne ve belirtilen nesnenin her ikisi de eşittir.
Sıralamak için CompareTo () yöntemini kullanabiliriz:
- Dize türü nesneler
- Sarmalayıcı sınıf nesneleri
- Kullanıcı tanımlı veya özel nesneler
Şimdi, Karşılaştırılabilir bir arayüz örneğini uygulayalım.
Karşılaştırılabilir Arayüz Örneği
Aşağıdaki Java programı, üye alanları olarak ad ve yaşı içeren bir Kişi sınıfını uygular. Bu sınıf, Kişi sınıfının nesnesini sıralamamıza izin verecek 'Karşılaştırılabilir' bir arayüz uygular.
Özel nesneleri sıralayacağımız için, Comparable arayüzünün 'CompareTo ()' yöntemini geçersiz kılmamız gerektiğini unutmayın.
ağ güvenlik anahtarınız nedir
Geçersiz kılınan CompareTo () yönteminin içinde, iletilen kişi nesnesinin yaşını geçerli nesnenin yaşıyla karşılaştırır ve buna göre değeri döndürürüz.
Örnek bir Java programı aşağıda verilmiştir.
//class person implementing Comparable interface class Person implements Comparable { private String name; private int age; //Person constructor public Person(String name, int age) { this.name = name; this.age = age; } //getter methods for Person members public int getAge() { return this.age; } public String getName() { return this.name; } //override toString () method @Override public String toString() { return ''; } //Override compareTo () method to compare age of two Person objects @Override public int compareTo(Person per) { if(this.age == per.age) return 0; else return this.age > per.age ? 1 : -1; } } public class Main{ public static void main(String() args) { //declare two objects of Person class Person p1 = new Person('Adrian', 24); Person p2 = new Person('Eddie', 26); int ageDiff = p1.compareTo(p2); //compare ages of two persons declared switch(ageDiff) { case -1: { System.out.println(p2.getName() + ' is older than ' + p1.getName()); break; } case 1: { System.out.println(p1.getName() + ' is older than ' + p2.getName()); break; } default: System.out.println(p1.getName () + ' and ' + p2.getName () + ' are of the same age!'); } } }
Çıktı:
Çıktıda görüldüğü gibi, Person sınıfının iki nesnesini yaş üye değişkenine göre karşılaştırmak için Karşılaştırılabilir bir arabirim kullanıyoruz.
Adından da anlaşılacağı gibi, Karşılaştırılabilir bir arayüz, nesnelerin aynı türden olması koşuluyla bir nesneyi diğeriyle karşılaştırmamızı sağlar. Nesneler kendilerini düzenlemeyi bildikleri sürece, bu arayüze ait tek yöntem olan 'CompareTo ()' kullanarak nesneleri kolayca sıralayabiliriz.
Java String CompareTo () Yöntemi
Java'da iki String türü nesneyi karşılaştırmak için CompareTo () yöntemini de kullanabiliriz. İki dize nesnesi, dize nesnesinin her bir karakteri eşdeğer Unicode karakterine dönüştürülerek sözlükbilimsel olarak karşılaştırılır.
İki dizge eşitse, 0 döndürülür. İlk nesne ikinci nesneden büyükse, o zaman pozitif bir değer döndürülür ve birinci dize nesnesi ikinci String nesnesinden daha küçükse negatif bir değer döndürülür.
Örneğin,
string1.compareTo (string2), string1 ve string 2'yi sözlüksel olarak karşılaştırır.
public class Main { public static void main(String args()) { //declare and print string objects String str1 = 'SoftwareTestingHelp'; String str2 = 'Java Series tutorial'; String str3 = 'Comparable Interface'; System.out.println('str1:' + str1); System.out.println('str2:' + str2); System.out.println('str3:' + str3); //compare strings and print the results. int retval1 = str1.compareTo( str2 ); System.out.println('
str1 & str2 comparison: '+retval1); int retval2 = str1.compareTo( str3 ); System.out.println('str1 & str3 comparison: '+retval2); int retval3 = str2.compareTo('compareTo method'); System.out.println('str2 & string argument comparison: '+retval3); } }
Çıktı:
Yukarıdaki programda, iki dizeyi karşılaştırmak için CompareTo () yönteminin nasıl kullanılacağını gördük. Bundan önce, tamsayı değerlerini (örneğin yaş) karşılaştırmak için CompareTo () yöntemini kullandık. Benzer şekilde, double gibi diğer veri türlerini CompareTo () yöntemiyle kullanabiliriz.
Şimdi Java'daki Karşılaştırıcı arayüzüne geçelim.
Java'da Karşılaştırıcı Arayüzü
Karşılaştırılabilir arayüzün çalışmasını zaten gördük. Karşılaştırılabilir arayüz, özel nesneleri tek bir veri üyesine göre sıralamamıza olanak tanır. Ancak, nesneyi birden çok alan veya veri üyesine göre sıralama gereksinimi ortaya çıktığında, bir Karşılaştırıcı arabirimi seçebiliriz.
Comparator arayüzünü kullanarak, özel nesneleri sıralamak için kaç alan kullanmak istediğimize bağlı olarak birden fazla karşılaştırıcı oluşturabiliriz. Karşılaştırıcı arayüzünü kullanarak, özel nesneyi iki üye alan adına ve yaşına göre sıralamak istediğimizi varsayarsak, biri ad için diğeri yaş için olmak üzere iki karşılaştırıcıya ihtiyacımız var.
Ardından bu Karşılaştırıcılar ile Collections.sort () yöntemini çağırabiliriz.
Öyleyse Karşılaştırıcıları tam olarak nasıl yazabiliriz?
Alanı olarak adı ve yaşı olan bir Sınıf Öğrencisi örneğini düşünün. Öğrenci nesnelerini ad ve yaş alanlarına göre sıralamak istediğimizi düşünün.
Bu amaçla, öncelikle Comparator sınıfları, StudentAgeComparator ve StudenNameComparator yazmamız gerekecek. Bu sınıflarda, Comparator arayüzünün karşılaştırma () yöntemini geçersiz kılacağız ve ardından öğrenci nesnelerini sıralamak için bu karşılaştırıcıların her birini kullanarak Collections.sort yöntemini çağıracağız.
Karşılaştırıcı arayüzü, iki farklı sınıftaki nesneleri karşılaştırmak için kullanılan bir 'karşılaştırma' nesnesi içerir. Karşılaştırma yönteminin genel sözdizimi şöyledir:
public int karşılaştırma (Nesne obj1, Nesne obj2);
Karşılaştırma yöntemi obj1 ile obj2'yi karşılaştırır.
Karşılaştırıcı arayüzü, java.util paket ve karşılaştırma yönteminden ayrı olarak; aynı zamanda equals adında başka bir yöntem içerir.
Java Karşılaştırıcı Örneği
Java'da bir Karşılaştırıcı örneği uygulayalım. Yine veri üyeleri olarak adı ve yaşı olan bir Öğrenci sınıfı aldık. Ardından, iki öğrencinin yaşlarını karşılaştırmak ve uygun değerleri döndürmek için karşılaştırma yöntemini geçersiz kılan bir karşılaştırıcı sınıf AgeComparator tanımlarız.
Ana yöntemde, Öğrenci nesnelerinden oluşan bir Dizi Listesi oluşturuyoruz. Ardından argümanlar olarak ArrayList ve AgeComparator nesnesiyle Collections.sort metodunu çağırıyoruz. Bu, Öğrenci nesnelerini yaşa göre sıralar.
Bu senaryoyu uygulayan Java programı aşağıda verilmiştir.
import java.util.*; //class student whose objects are to be sorted class Student{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } } //AgeComparator class implementing Comparator to compare objects class AgeComparator implements Comparator { public int compare(Object o1,Object o2){ Student s1=(Student)o1; Student s2=(Student)o2; if(s1.age==s2.age) return 0; else if(s1.age>s2.age) return 1; else return -1; } } class Main{ public static void main(String args()){ //create an ArrayList of Students ArrayList myList=new ArrayList(); myList.add(new Student(101,'Adrian',25)); myList.add(new Student(106,'Sydney',22)); myList.add(new Student(105,'Marcus',27)); //call Collections.sort method with AgeComparator object to sort ArrayList Collections.sort(myList,new AgeComparator()); System.out.println('Sorted Student objects by Age are as follows:'); Iterator iter= myList.iterator(); while(iter.hasNext()){ Student st=(Student) iter.next(); System.out.println(st.rollno+' '+st.name+' '+st.age); } } }
Çıktı:
Yukarıdaki programda, Öğrenci nesnelerini Yaşa göre sıralamak için AgeComparator yazmamıza benzer şekilde, Öğrenci nesnelerini ad alanına göre sıralamak için başka bir NameComparator da yazabiliriz.
Bu şekilde, nesneleri çeşitli alanlarda sıralamak için gerektiği kadar Karşılaştırıcı sınıfımız olabilir. İki int değişkenini karşılaştırma şeklimizde, Karşılaştırma yöntemini kullanarak diğer veri türlerinin değişkenlerini de karşılaştırabiliriz.
Karşılaştırılabilir Vs Karşılaştırıcı Arasındaki Fark
Karşılaştırılabilir Arayüz | Karşılaştırıcı Arayüzü |
---|---|
Öğeleri sıralamak için Collections.sort (Liste) kullanır. | Öğeleri sıralamak için Collections.sort (Liste, Karşılaştırıcı) kullanır. |
Karşılaştırılabilir arayüz, tek alanlı sıralama sağlar. | Karşılaştırıcı arayüzü, birden çok alan sıralaması sağlar. |
Karşılaştırılabilir arayüz, nesneyi doğal sıralamaya göre sıralar. | Karşılaştırıcı arayüzü, farklı nesnelerin çeşitli niteliklerini sıralar. |
Karşılaştırılabilir bir arayüz kullanarak, mevcut 'this' nesnesini belirtilen nesne ile karşılaştırabiliriz. | Karşılaştırıcı bir arayüz kullanarak, farklı sınıflardan nesneleri karşılaştırabiliriz. |
Java.lang paketinin bir parçası. | Java.util paketinin bir parçası. |
Karşılaştırılabilir bir arayüzün kullanılması gerçek sınıfı değiştirir. | Karşılaştırıcı, orijinal sınıfı değiştirmez. |
Öğeleri sıralamak için CompareTo () yöntemi sağlar. | Öğeleri sıralamak için karşılaştırma () yöntemi sağlar. |
Sıkça Sorulan Sorular
S # 1) Karşılaştırılabilir bir işlevsel arayüz var mı?
Cevap: Evet, karşılaştırılabilir bir işlevsel arayüzdür. Tek bir soyut yöntem olan CompareTo () bildirir.
S # 2) Bir sınıfı nasıl Karşılaştırılabilir hale getirirsiniz?
Cevap: Karşılaştırılabilir arayüzü uygulayarak bir sınıfı karşılaştırılabilir hale getiriyoruz. Sınıfın içinde, nesneyi sıralamak için CompareTo () yöntemini geçersiz kılıyoruz. Bir nesneyi geçip mevcut nesneyle karşılaştırıyoruz.
CompareTo () yöntemi, iki nesne eşitse 0 döndürür. İlk nesne ikinciden küçükse negatif bir sayı, birinci nesne ikinci nesneden büyükse pozitif bir sayı döndürür.
S # 3) Karşılaştırıcı arayüzünün temel amacı nedir?
Cevap: Karşılaştırıcı arayüzü esas olarak özel nesneleri sıralamak için kullanılır. Karşılaştırıcı bir arayüz, farklı sınıflardaki nesneleri karşılaştırmak için de kullanılabilir. Ayrıca, karşılaştırma arabirimi nesneleri birden çok alandaki sıralamak için kullanılabilir.
S # 4) Karşılaştırıcı Java'da neden kullanılıyor?
Cevap: Karşılaştırıcı arayüzü esas olarak, birden çok alana dayalı doğal sıralama dışında özel nesnelerimiz için farklı bir sıralama düzeni istediğimizde kullanılır.
S # 5) Karşılaştırılabilir arayüzü neler uygular?
Cevap: Karşılaştırılabilir arayüz, tüm sarmalayıcı sınıfları ve String sınıfı tarafından uygulanır. Özel nesneler ayrıca sıralama için karşılaştırılabilir arayüzü kullanır.
Sonuç
Bu eğitimde, Java'daki karşılaştırılabilir ve karşılaştırıcı arayüzleri tartıştık. Karşılaştırılabilir bir arayüz, nesneleri doğal sıralamaya göre sıralamak için kullanılır ve bir seferde nesneleri yalnızca bir alanda sıralayabilir.
Karşılaştırılabilir arabirim, Comparator arabirimini uygulayan sınıfta geçersiz kılınması gereken ve nesneleri sıralanacak olan 'CompareTo ()' yöntemine sahiptir.
Karşılaştırıcı arabirimi, başka herhangi bir sıraya göre sıralanacak özel nesneleri sıralamak için kullanılır. Karşılaştırıcı arayüzü ayrıca iki farklı sınıftaki nesneleri birden çok alana göre sıralamamıza izin verir.
=> Kolay Java Eğitim Serisini Okuyun.
Önerilen Kaynaklar
- Java Arayüzü ve Örneklerle Soyut Sınıf Eğitimi
- Java'da Arabirimi Ayarlayın: Örneklerle Java Seti Eğitimi
- Java Dağıtımı: Java JAR Dosyasının Oluşturulması ve Yürütülmesi
- Java Temel Bilgileri: Java Sözdizimi, Java Sınıfı ve Temel Java Kavramları
- Java Sanal Makinesi: JVM, Java Uygulamasını Çalıştırmada Nasıl Yardımcı Olur?
- Java'da ListIterator Arayüzü Örneklerle
- Java'da Nesne Dizisi: Nasıl Oluşturulur, Başlatılır ve Kullanılır
- Yeni Başlayanlar İçin JAVA Eğitimi: 100+ Uygulamalı Java Video Eğitimi