İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

Collection'larla Karşılaştırma ve Sıralama

Comparable Interface'i

Collection'ların sort ve search işlemlerinde, SortedSet ve SortedMap gibi sort'la ilgili olan collection'larda elemanlara arasında büyüklük küçüklük ilişkisi 'doğal sıralama' (natural ordering)'e göre yapılır. Doğal sıralama, iki nesnenin karşılatırmasının o nesnelerin üzerinde olmasıyla sağlanan sıralamadır. Örneğin sayılar için sırılama bellidir, 2 sayısı 3 sayısından öncedir. Karakterler için de 'A' harfi 'B' harfinden öncedir. (Ama 'a' harfi 'B'den sonradır.) Java, tamsayı, karakter, tarih gibi nesnelerin sıralamasının o nesnelerin 'Comparable' interface'ini implement etmeleri sayesinde anlar. Comparable interface'i

	public int compareTo(Object o);

method'undan ibarettir. Bu method'u implement eden class, o1 parametersi o2'den büyükse pozitif bir sayı,küçükse negatif bir sayı, eşitse sıfır gönderir.

Java'da bir çok class bu interface'i implement ettiği için sıralamaya tabi tutlabilirler. Gerektiğinde herhangi bir class'ın Comparable interface'ini implement etmesi sağlanarak sırlamaya tabi tutulabilir. Bu method istenen her şekilde implement edilebilir. Örneğin, Person diye bir class'ın Surname'e göre sıralanabilmesi isteniyorsa

class Person implements Comparable{
	...
	private String surname;
	...
	public int compareTo(Object o){
		Person person=(Person) o;
		return surname.compareTo(person.surname);			
	}
	...
}

Burada compareTo method'u String'in compareTo methodu kullanılarak implement edilmiştir. Ancak istenen başka şekillerde de implement etmek mümkündür. (Aslında object o'nun Person olup olmadığını instanceof operator'üyle kontrol etmek doğru olur.)

Comparator Interface'i

İstenirse Comparable interface'ni implement etmeyen class'lar için veya Comparable.compareTo method'undakinden farklı bir sırlama yampak istenirse doğal sırlama' (natural ordering) yerine Comparator adlı interface'i implement ederek de sıralam işlemleri yapılabilir. Comparator interface'i Comparable'ın aksine sıralancak nesnelerin değil herhangi karşılaştırıcı nesnenin implement edebileceği bir interfacedir. Comparator için method'u implement etmek yeterlidir :

	public int compare(Object o1, Object o2);

	Comparator personBirthdateComparator = new Comparator() {
        public int compare(Object o1, Object o2) {
            Person p1 = (Person) o1;
            Person p2 = (Person) o2;
            return p2.getBirthDate().compareTo(p2.getBirthDate());
        }
    };

	Collection.sort(persons,personBirthdateComparator);

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır