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.Comparator
arabirimi 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.
Person
uygulamak Comparable
ardı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 PersonAgeComparator
iki 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 Comparable
bir 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)
Comparable
genellikle 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 Comparators
ortak vakalar sağlar; örneğin, String
s 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
Comparable
doğal düzeni olan nesneler içindir. Nesnenin kendisi nasıl sipariş edileceğini bilir.
Comparator
doğ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 Comparator
Java'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.
Comparable
Java'da nesnenin doğal düzenini uygulamak için kullanılır. Java API Dizesinde, Date ve wrapper sınıfları uygulanırComparable
arabirimi .
Comparable
Java'da herhangi bir sınıf uygulama arayüzü varsa , o nesnenin toplanması List
veya Array
kullanı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 .
Comparable
Java'da uygulanan nesneler , sıralı bir haritada anahtarlar veya sıralı bir kümedeki öğeler olarak TreeSet
herhangi 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