Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi

Sorunuz mu var? Belki de çoktan soruldu..

0
comparator ve comparable neden var? Farkları nedir?

Açık 1 Cevaplar 204 Gösterim Java
Java'da kullanılan bu iki interface farkı neden var? Hangi durumlarda kullanmam gerekiyor? Farkları nelerdir?

1 cevap

0

Bir senaryo üzerinden ilerleyerek konuyu anlamak biraz daha kolay olacaktır sanıyorum.

Elimizde bir int array olduğunu düşünelim ve bu array içindeki bilgileri sıralamaya çalıştığımızı varsayalım. Bu diziyi sıralamak için bir kod yazacağız. Normal olarak herhangi bir sıralama algoritmasını seçip kodlayabilirsiniz. Java standard kütüphanesi bize dizileri sıralamak için bir komut seti veriyor. Direk Arrays.sort(array) diye çağırdığımız zaman diziyi bizim için sıralar. Buraya kadar sıkıntı yok. Peki dizinin içinde tuttuğumuz değer integer değilse de bizim yazdığımız bir sınıfsa ne olacak? Örneğin; Üye sınıfı içinde adı,soyadı, yaşı bilgileri olduğunu varsayalım. Ya da Muhasebe kayıtları tuttuğumuz bir İslem sınıfı içinde miktar, tarih bilgileri olduğunu varsayalım. Bu sınıflardan 100 tanesini bir diziye attığımızı varsayarsak, mesela üye, bu üyeleri de sıralamak istersek nasıl sıralanacak? isme göre alfabetik, soyisme göre alfabetik, ya da yaşa göre alfabetik gibi seçeneklerimiz var. Doğal olarak Arrays.sort metodu neye göre, nasıl sıralayacağını nasıl bilebilir? Bu durumda bize Java iki adet interface veriyor. Bunlar Comparator ve Comparable. 

Comparable interface bize bu sıralamanın yolunu göstermek için ilk seçeneğimiz. Bu interface bir adet method verir. Bu metod sayesinde bir üyeyi veya aktiviteyi nasıl diğeriyle karşılaştıracağımızı söyleriz. Arrays.sort fonksiyonu da bu interface üzerinden sıralamayı yapabilir.

public int compareTo(Uye u1) {
   if(this.yas > u1.yas) return 1;
   if(this.yas < u1.yas) return -1;
   return 0;
}

Diğer seçenek ise comparator interface'i. Comparator ile başka bir sınıf üzerinden gerçekleştirilip iki üyeyi karşılaştırabiliriz. 

public int compare(Uye uye1, Uye uye2) {
  if(uye1.yas > uye2.yas) return 1;
  if(uye1.yas < uye2.yas) return -1;
  if(uye1.yas == uye2.yas) return 0;
}

Kısaca toparlamak gerekirse; Comparator arada karşılaştırma işlemi yapacak farklı bir sınıf için kullanılan interface. Comparable ise bir sınıfın instanceları arasında karşılaştırma yapabilmek için kullanılan interfacedir.

5 Kasım 2016 kenan (2,833 puan) cevapladı
...