Karşılaştırılabilir ve Karşılaştırıcıları uygulayan sınıflar gördüm . Ne anlama geliyor? Neden birini diğerinin üzerinde kullanayım?
Karşılaştırılabilir ve Karşılaştırıcıları uygulayan sınıflar gördüm . Ne anlama geliyor? Neden birini diğerinin üzerinde kullanayım?
Yanıtlar:
Aşağıdaki metin Karşılaştırıcıya Karşı Karşılaştırılabilir
karşılaştırılabilir
Karşılaştırılabilir bir nesne, kendisini başka bir nesneyle karşılaştırabilir. Sınıfın kendi java.lang.Comparableörneklerini karşılaştırabilmesi için arabirimi uygulaması gerekir .
Karşılaştırıcı
Bir karşılaştırma nesnesi iki farklı nesneyi karşılaştırabilir. Sınıf kendi örneklerini değil, başka bir sınıfın örneklerini karşılaştırır. Bu karşılaştırma sınıfı java.util.Comparatorarabirimi uygulamalıdır .
Uygulama Comparable" Kendimi başka bir nesneyle karşılaştırabilirim " anlamına gelir . Bu, genellikle tek bir doğal varsayılan karşılaştırma olduğunda yararlıdır.
Uygulama Comparator" Diğer iki nesneyi karşılaştırabilirim " anlamına gelir . Bu genellikle bir türdeki iki örneği karşılaştırmanın birden çok yolu olduğunda yararlıdır - örneğin, insanları yaşa, ada göre karşılaştırabilirsiniz.
Personuygulamak Comparableardından değiştiremezsiniz çünkü, nasıl iki kişi karşılaştırılır.
Person. 2) Karşılaştırıcı, örneğin PersonAgeComparatoriki farklı varlığı karşılaştırabilen ve o sıralama düzeninde hangisinin önce geleceğine karar verebilen. 3) Varlıkların bir koleksiyonunu ve bir karşılaştırıcıyı alan ve siparişi belirlemek için karşılaştırıcıyı kullanarak bu koleksiyonu sıralar.
Karşılaştırılabilir bir sınıf kendi karşılaştırmasını uygulama sağlar:
Karşılaştırıldığında, Karşılaştırıcı harici bir karşılaştırmadır:
Her iki uygulamada da, karşılaştırılmasını istediğiniz şeyi seçebilirsiniz. . Jenerikler ile, bunu beyan edebilir ve derleme zamanında kontrol ettirebilirsiniz. Bu güvenliği arttırır, ancak uygun değeri belirlemek de zordur.
Bir kılavuz olarak, genellikle bu nesnenin karşılaştırılabileceği en genel sınıfı veya arabirimi kullanırım, tüm kullanım durumlarında öngördüğüm ... Çok kesin bir tanım değil! :-(
Comparable<Object>derleme zamanında tüm kodlarda kullanmanıza izin verir (gerekirse iyi veya değilse kötüdür ve derleme zamanı hatasını kaybedersiniz); uygulamanız nesnelerle başa çıkmak ve gerektiğinde sağlam bir şekilde yayın yapmak zorundadır.Comparable<Itself> aksine çok katı.Komik, Kendini Alt Sınıfa alt sınıflandırdığınızda, Alt Sınıf da Karşılaştırılabilir olmalı ve bu konuda sağlam olmalıdır (veya Liskov İlkesini kırar ve çalışma zamanı hataları verir).
java.lang.Comparable
Uygulamak için Comparablebir arayüz, sınıfı tek bir yöntemi uygulamalıdırcompareTo()
int a.compareTo(b)
Örneğini sıralamak istediğiniz sınıfı değiştirmeniz gerekir. Böylece sınıf başına sadece bir sıralama dizisi oluşturulabilir.
java.util.Comparator
Karşılaştırıcı arabirimini uygulamak için sınıf tek bir yöntem uygulamalıdır compare()
int compare (a,b)
Comparablegenellikle tercih edilir. Ancak bazen bir sınıf zaten uygulanır Comparable, ancak farklı bir mülke göre sıralama yapmak istersiniz. Sonra birComparator .
Bazı sınıflar aslında Comparatorsortak vakalar sağlar; örneğin, Strings sıralandıklarında varsayılan olarak büyük / küçük harfe duyarlıdır, ancak Comparatorçağrılan bir statik de vardır CASE_INSENSITIVE_ORDER.
Web'de bulunan Karşılaştırıcı ve Karşılaştırılabilir I arasındaki birkaç fark var:
Görüyorsanız, bu ikisi arasındaki mantıksal fark Java'da Karşılaştırıcı'dır, kendisine sağlanan iki nesneyi karşılaştırırken, Karşılaştırılabilir arabirim "bu" başvuruyu belirtilen nesneyle karşılaştırır.
Java ile karşılaştırılabilir nesnenin doğal düzenini uygulamak için kullanılır. Java API Dizesinde, Date ve wrapper sınıfları Karşılaştırılabilir arabirimi uygular.
Herhangi bir sınıf Java'da Karşılaştırılabilir arabirimi uygularsa, o nesnenin toplanması List.s veya (Array.sort () yöntemi kullanılarak otomatik olarak sıralanabilir ve nesne, CompareTo yöntemiyle tanımlanan doğal sıraya göre sıralanır.
Java'da Karşılaştırılabilir'i uygulayan nesneler, herhangi bir Karşılaştırıcı belirtmeden, sıralanmış bir haritada anahtarlar veya sıralı bir kümede örneğin TreeSet'te öğeler olarak kullanılabilir.
site: Java'da Karşılaştırıcı ve Karşılaştırılabilir nasıl kullanılır? Örnek olarak
Devamını oku: Karşılaştırıcı ve Karşılaştırılabilir Java'da nasıl kullanılır? Örnek olarak
Comparabledoğal düzeni olan nesneler içindir. Nesnenin kendisi nasıl sipariş edileceğini bilir.
Comparatordoğal sıralaması olmayan veya farklı bir sıralamayı kullanmak istediğiniz nesneler içindir.
Karşılaştırıcı ve Karşılaştırılabilir arayüzler arasındaki fark
Comparable kendisini başka bir nesneyle karşılaştırmak için kullanılır.
Comparator iki veri türünü karşılaştırmak için kullanılan nesnelerdir.
Görüyorsanız, bu ikisi arasındaki mantıksal fark ComparatorJava'dadır, kendisine sağlanan iki nesneyi karşılaştırın.Comparable karşılaştırırken arabirim "bu" başvuruyu belirtilen nesneyle karşılaştırır.
ComparableJava'da nesnenin doğal düzenini uygulamak için kullanılır. Java API Dizesinde, Date ve wrapper sınıfları uygulanırComparable arabirimi .
ComparableJava'da herhangi bir sınıf uygulama arayüzü varsa , o nesnenin toplanması Listveya Arraykullanılarak otomatik olarak sıralanabilir Collections.sort()veya Array.sort()yöntem ve nesne tarafından tanımlanan doğal sıraya göre sıralanır.compareTo yöntemle .
ComparableJava'da uygulanan nesneler , sıralı bir haritada anahtarlar veya sıralı bir kümedeki öğeler olarak TreeSetherhangi bir belirtmeksizin anahtar olarak kullanılabilir Comparator.
Karşılaştırılabilir ve Karşılaştırıcıyı uygulamak için ek açıklama kitaplığım:
public class Person implements Comparable<Person> {
private String firstName;
private String lastName;
private int age;
private char gentle;
@Override
@CompaProperties({ @CompaProperty(property = "lastName"),
@CompaProperty(property = "age", order = Order.DSC) })
public int compareTo(Person person) {
return Compamatic.doComparasion(this, person);
}
}
Daha fazla örnek görmek için bağlantıyı tıklayın. compamatic