Collection Framework
java.util paketi pek çok özel işlemi yapmanıza olanak sağlar. Bu paket java dilinde kullanılmak üzere yazılmış pek çok aracı barındırır. Bunlardan en önemlisi ise collection frameworktür.
Bu framework C++ dilindeki STL ile yapılabilen işlemleri gerçekleştirmek için kullanılmaktadır. Java diline 1.2 versiyonundan sonra eklenmiş bu framework daha sonraları Generics uygulama yazma imkanları ile birlikde daha da gelişmiştir. Kısaca collection framework, bağlı liste, liste, map, kuyruk, hashtablo gibi veri tipleri tanımlamamıza olanak vermektedir.
Colection framework bir seri sınıftan teÅŸekküldür ama bu tüm sınıflar bir gurup interface’den gelmektedir. İlgili interfaceler öğrenildikten sonra yapılması ,gereken tek ÅŸey hangi iÅŸi hangi sınıf ile kotaracağını bilmek ve sınıfın hangi interfacei kullandığını bilmektir.
java.lang paketinde yer alan iterable arabirim collection framework arabirimlerince de kullanılmaktadır. Bu nedenle collection framework sınıfları for-each tipi for döngüsüne uygundurlar. Bu açılardan Colection framework üç teknolojinin üzerine kuruludur. Bunlar Generics, AutoPacking ve Iterable For Each teknolojileridir.
Collection Frameworkü kabaca inceleyeceÄŸiz. Yazım esnasında metotlar ve exception fırlatımları ile ilgili IDE’lerimiz (netbeans ve eclipse) yeterince yardımcı olmaktadır.
Collection Framework Interfaceleri
Collection frameworkü anlamak interfaceleri anlamaktan geçer. Java tüm Collections arabirimleri Generick şekilde sunmaktadır. Bu frameworkün başlıca interfaceleri şunlardır.
Collection Interface, Tüm collection Interfaceleri tarafından kullanılan ana arabirimdir. Bir küme tanımlamanıza olanak verir. Temel yer alan metotlar; add, addAll, clear, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, size ve toArray metotlarıdır. Collection ınterface’i bir küme olarak
düşünebilirsiniz.
List ınterface, Collection arabiriminden extends yapılmıştır. Bir liste tanımlamaya olanak sağlayan bir arabirimdir. add metodunun ve addAll metodunun bir gelişmiş versiyonu olarak kaçıoncı liste elemanına değer ekleyeceğinizi belirleyebileceğiniz iki farklı metot ve get, indexOf, lastIndexOf, listIterator, remove ve set gibi metotları barındırır.
Set Interface, Set tipli sınıflarda kullanılır. Bu arabirim de yine Collection Interface’den extendstir. Ek metotlar ortaya koymaz.
SortedSet Interface Set arabiriminden extends bir arabirimdir. elemanlarının sıralandığı bir küme deklare etmeye olanak sağlar. Küme içerisinde sıralı veriler barındırdığı için ek olarak, comperator, headSet, subSet, last, tailSet şeklinde metotları bulunur.
NavigatableSet Interface SortedSet arabiriminin genişletilmiş bir versiyonudur. Javanın altıncı versiyonunda eklenmiştir. cailing, descandingIterator, descandingSet, floor, headSet, higher, lower, pollFirst, pollLast gibi yeni metotlar da sunar.
Queue Interface, Collection interfaceden extend bir arabirimdir. FIFO tipli bir liste tanımplamaya olanak sağlar. element, offer, peek, poll, remove şeklinde metotlar barındırır. Örneğin element metodu kuyruğun başındaki değeri alır ve exception ile bunu yaparken peek bunu exception olmadan yapar. poll ise elemanı
alır ve listeden çıkatır, remove ise bunu bir exceptiona bağımlı olarak yapar. offer metodu ise listenin sonuna yeni bir eleman ekler.
Deque interface ise Queue interfaceden extends olmuştur. İki ucu açık bir veri tipi deklare etmeye olanak sağlar. Bu sayede FIFO ve LILO gibi tipler deklare edilebilir. push ve pop metotları sayesinde stack gibi hareket edebilir. Kullandığı temel metotlar, addFirst, addLast, descandingIterator, getFirst, getLast, offerFirst, offerLast, peekFirst, peekLast, pollFirst, poolLast, pop, push, removeFirst, removeLast, removeLastOccurence metotlarıdır.
Yukarıda bahsetmiş olduğumuz arabirimlerin ortaya koyduğu metotları isimlerinden şayet anlamadıysanız sözlük kullanarak şimdi anlamanızı ve yukarıdaki interfacelerin mantığını bir kere kavramanızı öneririm. Bu interfacelerin kimi metotları aşağıda yer alan collection sınıflarında birebir veya kısmen kullanılmaktadırlar.
Bazı Collection Sınıflar.
ArrayList
List interfaceini taşıyan bir sınıftır. Örnek;
import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayList<String> al= new ArrayList<String>(); al.add("Hello"); al.add("How"); al.add("is"); al.add("kill"); System.out.println("Size of array: " + al.size()); System.out.println(al.toString()); al.add(2, "added"); System.out.println(al.toString()); al.remove(4); System.out.println(al.toString()); String arrry[]= new String[al.size()]; arrry= al.toArray(arrry); System.out.println(arrry.toString()); for(String itm: al){ System.out.println(itm); } } }
LinkedList Sınıfı
Bağlı liste tanımlamaya olanak verir. List, Deque ve Queue arabirimlerini genişletmiştir. Örnek;
import java.util.LinkedList; public class Test { public static void main(String[] args) { LinkedList<String> ll= new LinkedList<String>(); ll.add("A"); ll.add("B"); ll.addFirst("1"); ll.addLast("Z"); ll.add(2, "Q1"); ll.push("2"); System.out.println(ll); ll.pop(); System.out.println(ll); ll.poll(); System.out.println(ll); } }
HashSet Sınıfı ve LinkedHashSet
Liste nazaran daha hızlı şekilde veri depolamaya izin verir. Verilerin sırası garanti edilmez. Verilerin bir küme olarak saklanması işleminde kullanılabilir. Bu sınıf AbstractSet ve Set arabirimlerini kullanır. LinkedHashSet ise bir bağlı liste olarak HashSet tutar bu nedenle çalışması daha linkedListe yakın şekilde
sıralı sonuç döndürür.
TreeSet Sınıfı
Bu sınıf AbstractSet ve Set arabirimleri ile birlikte SortedSet arabirimini de kullanır. Ağaç veriyapısına sahip olduğundan dolayı verileri sıralı olarak belleğe atabilir. Sıralanması gereken çok fazla veri varsa çok kullanışlıdır.
Örnek;
import java.util.LinkedList; import java.util.TreeSet; public class Test { public static void main(String[] args) { LinkedList<String> ll= new LinkedList<String>(); ll.add("A"); ll.add("B"); ll.addFirst("1"); ll.addLast("Z"); ll.add(2, "Q1"); ll.push("2"); System.out.println(ll); TreeSet<String> ts=new TreeSet<String>(ll); System.out.println(ts); System.out.println(ts.subSet("A", "C")); } }
PriortyQueue Sınıfı
Queue arabirimini genişleten bir sınıftır. Karşılaştırıcı ekleyerek bir kuyruk sınıfı oluşturur.
ArrayDeque Sınıfı
Çift uçlu bir kuyruk yapısı olan Array deklera etmeye yarar Deque arabiriminin tüm özelliklerini kullanır.
EnumSet Sınıfı
Elemanlarının enum tipli verilerden oluştuğu bir veri kümesi deklare etmeye yarar AbstractSet sınıfını kullanır.
Bir Sonraki Yazıda…
Collection Framework konusuna devam edeceğiz. Iteratörlere göz atacağız ardından Map veritipini kullanmamıza olanak sağlayan Framework araçlarına değineceğiz.
" Java Notlarım -12 " için 1 Yorum
Java uğraşan herkesin okuması gereken bir yazı. Çünkü eninde sonunda, herkes ARRAY ve SET gibi yapılarla uğraşmak zorunda kalır.
Eline saÄŸlık…