Merhabalar

Elimizdeki sınıfa kendini Comparable ile implements neden yapılır? Bu durumun amacı nedir ?

public class EntityA implements Comparable < EntityA >

soruldu: 26 Nis, 03:34

keramiozsoy's gravatar image

keramiozsoy
171131519
cevap kabul oranı: 50%


Comparable karşılaştırma işlemleri için kullanılır. Collection'dan türeyen tüm liste yapıları Collections.sort yaparken compareTo metodunu çağırdığı için özellikle sıralama işlemleri için kullanılır.

Bu önemli özelliğin dışında nesneleri kendi istediğin özelliklerle karşılaştırmak için de kullanabilirsin. Aynı şeyi equals metodunu override edip de yapabilirsin. Normalde equals nesnelerin referanslarını karşılaştırıyorken, bunu değiştirebilirsin mesela sadece IDlerini karşılaştırabilirsin. Ama equals boolean değeri döndürdüğü için belki tam istediğini karşılamayabilir veya equals metodunu farklı sebeplerden dolayı bozmak istemeyebilirsin.

public interface Comparable<T> {
    int compareTo(T o);
}

Verdiğin örnekte T'ye kendi tipini vermenin sebebi ise karşılaştırılan nesneler doğal olarak aynı tipte olmalıdır. EntityA ile EntityA compare edilecektir. Ancak T'ye kendini verme işi tasarıma göre değişebilir, T'ye başka tipler de verebilirsin, veya boş bırakabilirsin.

Person için yaşlarını karşılaştırma metodu düşünelim, Person'da id, name, age, location gibi değerler yer alsın. Tüm bunlarla kendi istediğin, özel compareTo metodunu yazabilirsin.

Mesela şimdi sadece yaşları üzerinden karşılaştıralım, bu koşullara başka parametreler de ekleyebilirsin:

public int compareTo(Person person) {
    if (this.age == person.getAge()) {
        return 0;
    }
    else {
        return this.age > person.getAge() ? 1 : -1;
    }
}

Aynı yaştalarsa 0, büyük ve küçük durumuna göre 1 ve -1. Bu Java standardı olarak böyledir ama kullanıma göre bunu geliştirebilirsin.

Collections.sort(personList); işlemi yapılırken senin override ettiğin compareTo() metodu çağırılıp, Person nesneleri yaşlarına göre liste içinde sıralanır.

permanent link

cevaplandı: 26 Nis, 04:41

pvalue's gravatar image

pvalue
5571310
cevap kabul oranı: 17%

değiştirildi: 26 Nis, 04:45

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,076
×281

Soruldu: 26 Nis, 03:34

Görüntüleme: 199 kez

Son güncelleme: 26 Nis, 04:45

powered by BitNami OSQA