Java’da Hazır Veri Yapıları ve Koleksiyonlar (Collections) Yrd. Doç. Dr. Aybars UĞUR Koleksiyon (Collection) Collection (koleksiyon), diğer verileri tutabilen veri yapısıdır. Koleksiyon arayüzleri (collection interfaces), her tür koleksiyonda yapılabilecek işlemleri tanımlar. Koleksiyon gerçekleştirimleri (collection implementations), bu işlemleri çeşitli yollarla gerçekleştirir. Bazı arayüzler : Set, List, Map olup Java.util paketi içindedirler. VERİ YAPILARI : 13 Java'da Hazır Veri Yapıları ve Koleksiyonlar 2 Koleksiyon Arayüzleri Liste (List) : Sıralı bir tür koleksiyondur. Tekrarlı elemanları içerebilir. Listeler 0. elemandan başlar. Koleksiyondan devraldığı özellikler dışında, indislerine göre elemanları işleme (sort,...), eleman arama (binarySearch) ve elemanlar üzerinde dolaşma gibi metotları (ListIterator) da vardır. Liste arayüzü, “ArrayList”, “LinkedList” ve “Vector” sınıfları ile gerçekleştirilir. “ArrayList” sınıfı, boyutu değiştirilebilen dizidir ve “Vector” sınıfından hızlı çalışır. “LinkedList” sınıfı ise bağlı liste gerçekleştirimidir. Çok sayıda metot devralmaktadırlar. Çift bağlı liste, kuyruk, yığıt (yığıt için Java’da ayrıca sınıf da vardır) vs. de gerçekleştirilebilmektedir. VERİ YAPILARI : 13 Java'da Hazır Veri Yapıları ve Koleksiyonlar 3 Koleksiyon Arayüzleri Küme (Set) : Küme, elemanları tek (tekrar olmadan) tutan koleksiyon tipinde veri yapısıdır. İki önemli Küme gerçekleştirimi : HashSet ve TreeSet’tir. HashSet, elemanlarını “Hash” tablosunda tutar, TreeSet ise ağaçta tutar. VERİ YAPILARI : 13 Java'da Hazır Veri Yapıları ve Koleksiyonlar 4 Hazır Sıralama ve İkili Arama import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; tfoutput.setText(""+ind); setSize(200,150); show(); } public class bsearch extends JFrame { public bsearch() { super("BSearch Ornek"); public static void main ( String args[] ) { bsearch app = new bsearch(); app.addWindowListener ( new WindowAdapter() Container c = getContentPane(); { c.setLayout(new FlowLayout()); public void windowClosing(WindowEvent e) final JTextField tfoutput = new JTextField(10); { c.add(tfoutput); System.exit(0); } Dizi sıralandıktan (sort metodu ile) sonra // float, char, ... için de yapılabilir. } 1,2,4,6,7,8,9,11,15 int a[] = { 4,2,1,8,6,7,9,15,11 }; ); içinde (binarySearch metodu ile) 4 değeri aranmaktadır. Arrays.sort(a); } konumu (2) metin kutusuna yazdırılır. Dizi içindeki int ind = Arrays.binarySearch(a,4); } VERİ YAPILARI : 13 Java'da Hazır Veri Yapıları ve Koleksiyonlar 5 SortedSetTest ve TreeSet import java.util.*; public class SortedSetTest { private static String names[] = { "yellow","green", "black","tan","grey","white","orange"," red","green" }; public SortedSetTest() { TreeSet m = new TreeSet(Arrays.asList(names)); System.out.println("Set: "); printSet(m); System.out.print("orange'dan öncekiler :"); printSet(m.headSet("orange")); System.out.print("orange'dan sonrakiler:"); printSet(m.tailSet("orange")); System.out.println("İlk eleman :"+m.first()); System.out.println("Son eleman :"+m.last()); } public void printSet(SortedSet setRef) { Iterator i = setRef.iterator(); while(i.hasNext()) System.out.print(i.next()+" "); System.out.println(); } public static void main(String args[]) { new SortedSetTest(); } } Ekran Çıktısı : Set: black green grey orange red tan white yellow orange'dan öncekiler :black green grey orange'dan sonrakiler:orange red tan white yellow İlk eleman :black Son eleman :yellow VERİ YAPILARI : 13 Java'da Hazır Veri Yapıları ve Koleksiyonlar 6