Koleksiyonlar (Collections)

Benzer belgeler
Şablon Türler (Generics)

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

Başlangıç 2. Generic İfadeler 3. Arayüzler (Interfaces) 5. LINQ ile Sık Kullanılan Arayüzler 7. Koleksiyon Sınıfları 14

static void dizi_24() { Random rnd = new Random(); int [] tutulan=new int[10]; int dogru;

Bilgisayar Programcılığı. Ögr. Gör. Cansu AYVAZ GÜVEN

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

YZM 2116 Veri Yapıları

Görsel Programlama DERS 04. Görsel Programlama - Ders04/ 1

Programlama Dilleri 3

ArrayList Uygulamaları

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

Standard Template Library

Aşağıdaki programı inceleyip ekrana ne yazacağını söyleyebilir misiniz?

KUYRUKLAR. Doç. Dr. Aybars UĞUR

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Lambda İfadeleri (Lambda Expressions)

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Arasınav Örnek Soruları Bahar 2018

BAĞLI LİSTELER BAĞLI LİSTELER

Nesneler için torbalar (Collections) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 12 1

Nesneye Dayalı Programlama

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

DATA STRUCTURES. Part IV. IEEE 754 FP Standardı, Dinamik Dizi, Koleksiyonlar, Diğer Önemli Konular ve İlgili Programlama Örnekleri

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Class LinkedList java.lang.object java.util.abstractcollection java.util.abstractlist java.util.abstractsequentiallist java.util.

ArrayList(int initialcapacity) Sığası (capacity) parametrenin belirlediği sayıda olan bir dizi oluşturur.

VERİ YAPILARI DERS NOTLARI BÖLÜM 5 QUEUE (KUYRUK) Yard. Doç. Dr. Deniz KILINÇ

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Veritabanı İşlemleri

Java String İşlemleri

BAĞLAÇLI LİSTELER LINKED LISTS

BAĞLAÇLI LİSTELER LINKED LISTS

I Java Veri Yapıları 1

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

YIĞINLAR YIĞINLAR. Yığın İşlemleri Postfix, Prefix, Infix. G. Ü. Bilgisayar Mühendisliği Bölümü

Veri Yapıları. Yrd. Doç. Dr. Şadi Evren ŞEKER

NESNEYE DAYALI PROGRAMLAMA 11. HAFTA UYGULAMA DERSİ

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

Nesne Tabanlı Programlama

Yigin & Kuyruk {\} /\ Suhap SAHIN Onur GÖK

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

EĞİTİM : LINQ to SQL. Bölüm : LINQ e Genel Bakış. Konu : LINQ Nedir? Page 1 of 25

NESNE TABANLI PROGRAMLAMA-2 DERS UYGULAMALARI-1

YZM 2116 Veri Yapıları

BİL-141 Bilgisayar Programlama I (Java)

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır.

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

YZM VERİ YAPILARI DERS#9: HASH FONKSİYONLARI

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Java Koleksiyonları (Java Collections)

ArrayList ve List yapıları. Bilgisayar Programlama 2 Erciyes Üniversitesi Bahriye Akay

JAVADA DİZİ İŞLEMLERİ

Đlgili konular: Collection, Set, HashSet, Comparable, Comparator, TreeMap, Collections.synchronizedSortedSet(SortedSet), Serialized Form

Veri Yapıları ve Algoritmalar dönem

İş Parçacıkları Thread(s)

Week 6: Bağlı Liste (Linked List) BAĞLI LİSTE KAVRAMI TEKİL (SINGLE) BAĞLI LİSTE ÇİFT (DOUBLE) BAĞLI LİSTE DAİRESEL (CIRCULAR) BAĞLI LİSTE

1 RUBY HAKINDA 1 Ruby nin Gelişim Hikayesi 1 Neden Ruby? 1 Neden Bu Kadar Popüler? 2

Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap

YMT219 VERİ YAPILARI ÖDEV-1

Operator Aşırı Yükleme (Operator OverLoading)

C# Console Uygulamaları ifelse Yapıları 2

DOSYA ORGANİZASYONU. Sıralı erişimli dosya organizasyonu yöntemleri ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

İlgili Konular: Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, Serialized Form

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Decorator Tasarım Şablonu

SIRALAMA SORTING. Yrd. Doç. Dr. Aybars UĞUR

YZM 2116 Veri Yapıları

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

YZM 2116 Veri Yapıları

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

C# VE JAVA NESNE YÖNELİMLİ PROGRAMLAMA DİLLERİNDE COLLECTION FRAMEWORK'LERİN KARŞILAŞTIRMALI PERFORMANS ANALİZLERİ.

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

VERİ YAPILARI. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ HASH TABLOLARI.

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Nesne Tabanlı Programlama

Merge Sort Bireşen Sıralama

Liskov Substitution Principle (LSP) Liskov un Yerine Gecme Prensibi KurumsalJava.com

Veri Yapıları. Öğr.Gör.Günay TEMÜR Düzce Üniversitesi Teknolojis Fakültesi

Çanakkale Onsekiz Mart Üniversitesi. Bilgisayar Mühendisliği Bölümü

AĞAÇLAR. Doç. Dr. Aybars UĞUR

public static int Toplam int x, int y

Arasınav Soruları Bahar 2018

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Java Programlama. Diziler, Döngüler ve Karakter Katarları (String Sınıfı)

BAŞLAYINIZ DENİLMEDEN SORU KİTAPÇIĞINI AÇMAYINIZ.

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

Yrd. Doç. Dr. Caner ÖZCAN

Kılgıladığı arayüzler: Serializable, Cloneable, Map<K,V>, NavigableMap<K,V>, SortedMap<K,V>

BOĞAZİÇİ ÜNİVERSİTESİ UNVAN DEĞİŞİKLİĞİ SINAVI PROGRAMCI

Yrd. Doç. Dr. Caner ÖZCAN

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Transkript:

Koleksiyonlar (Collections)

Bazı Başlıklar Koleksiyon arayüzleri ve türler Listeler (List) Kuyruklar (Queues) Yığınlar (Stacks) Bağlı Listeler (Linked Lists) Sıralı Listeler (Sorted Lists) Sözlükler (Dictionaries) Lookups HashSets BitArrays Performans

Collection Interfaces and Types Koleksiyon sınıflarını 2 kategoride toplamak mümkündür: Object türünde elemanlar depolayabilen kolleksiyonlar (System.Collection namespace) Şablon koleksiyon sınıfları.clr 2.0 dan önce mümkün değildi. (System.Collection.Generic)

Özel bir tür için geliştirilmiş olan koleksiyon sınıfları Collections.Specialized namespace inde bulunmaktadır.

Listeler (Lists) Dinamik listeler için,.net Framework, ArrayList ve List<T> sınıflarını kullanıma sunmuştur.

Liste Oluşturmak Liste nesnelerini varsayılan yapıcıları invoke edilerek oluşturulabilir. İlk etapta varsayılan yapıcıyı kullanarak boş bir liste oluşturulur. Elemanlar listeye eklendikçe kapasite, 4 elemana yetecek kadar artar. 5. eleman eklendiğinde ise, boyut 2 katına çıkarak 8 eleman saklayabilir hale gelir. Sınırı aşan her ekleme kapasiteyi 2 ye katlar.

class Program static void Main(string[] args) ArrayList objectlist = new ArrayList(); List<int> intlist = new List<int>(); List<Racer> racers = new List<Racer>(); ArrayList objectlist 2= new ArrayList(10); List<int> intlist2 = new List<int>(25);

İlk Değer Atama class Program static void Main(string[] args) List<int> intlist = new List<int>() 1, 2 ; List<string> stringlist = new List<string>() "bir", "iki", "üç" ;

Eleman Ekleme class Program static void Main(string[] args) List<int> intlist = new List<int>(); intlist.add(1); intlist.add(2); List<string> stringlist = new List<string>(); stringlist.add("bir"); stringlist.add("iki");

class Program static void Main(string[] args) Racer graham = new Racer("Graham", "Hill", "UK", 14); Racer emerson = new Racer("Emerson", "Fittipaldi", "Brazil", 14); Racer mario = new Racer("Mario", "Andretti", "USA", 12); List<Racer> racers = new List<Racer> (20) graham, emerson, mario ; racers.add(new Racer("Michael", "Schumacher", "Germany", 91)); racers.add(new Racer("Mika", "Hakkinen", "Finland", 20));

AddRange class Program static void Main(string[] args) List<Racer> racers = new List<Racer> (20); racers.addrange(new Racer[] new Racer("Niki","Lauda","Autria",25), new Racer("Ayrton","Senna","Brazil",41));

AddRange() metodu IEnumerable<T> türünden nesneleri kabul etmektedir. Bu yüzdendir ki az önce yazdığımız kod parçası geçerlidir.

Eleman Ekleme Insert() metodu ile belirli bir pozisyona eleman eklemek mümkündür.

class Program static void Main(string[] args) Racer graham = new Racer("Graham", "Hill", "UK", 14); Racer emerson = new Racer("Emerson", "Fittipaldi", "Brazil", 14); Racer mario = new Racer("Mario", "Andretti", "USA", 12); List<Racer> racers = new List<Racer> (20) graham, emerson, mario ; racers.add(new Racer("Michael", "Schumacher", "Germany", 91)); racers.add(new Racer("Mika", "Hakkinen", "Finland", 20)); racers.insert(3, new Racer("Phil", "Hill", "USA", 3));

Elemanlara Ulaşma IList ve IList<T> arayüzlerini implement eden tüm sınıflar bir indeksi de beraberinde kullanıyordur. Böylece bu sınıfların elemanlarına indeks kullanarak ulaşmak mümkün olur.

class Program static void Main(string[] args) Racer graham = new Racer("Graham", "Hill", "UK", 14); Racer emerson = new Racer("Emerson", "Fittipaldi", "Brazil", 14); Racer mario = new Racer("Mario", "Andretti", "USA", 12); Racer r1 = racers[3]; for (int i = 0; i < racers.count; i++) Console.WriteLine(racers[i].ToString());

Indeks kullanarak ArrayList, StringCollection ve List<T> koleksiyon sınıflarının elemanlarına erişmek mümkündür.

List<T> sınıfı, IEnumerable arayüzünü implement ettiğinden, koleksiyonun elemanları üzerinde foreach kullanılarak dolaşmak mümkündür.

class Program static void Main(string[] args) Racer graham = new Racer("Graham", "Hill", "UK", 14); Racer emerson = new Racer("Emerson", "Fittipaldi", "Brazil", 14); Racer mario = new Racer("Mario", "Andretti", "USA", 12); Racer r1 = racers[3]; foreach (Racer r in racers) Console.WriteLine(r.ToString());

Eleman Silme Koleksiyondan indeks numarası kullanılarak eleman silmek mümkündür. İndeksını kullanmadan Remove() metodu ile de silme gerçekleştirilir. Fakat bu durumda koleksiyon üzerinde arama yapılacak ve silinmek istenen elmanın indeksi bulunacak (IndexOf metodu ile) ve bunun silinmek istenen eleman olup olmadığı test edilcektir.

class Program static void Main(string[] args) Racer graham = new Racer("Graham", "Hill", "UK", 14); Racer emerson = new Racer("Emerson", "Fittipaldi", "Brazil", 14); Racer mario = new Racer("Mario", "Andretti", "USA", 12); Racer r1 = racers[3]; racers.removeat(3); foreach (Racer r in racers) Console.WriteLine(r.ToString());

class Program static void Main(string[] args) Racer graham = new Racer("Graham", "Hill", "UK", 14); Racer emerson = new Racer("Emerson", "Fittipaldi", "Brazil", 14); Racer mario = new Racer("Mario", "Andretti", "USA", 12); Racer r1 = racers[3]; int indextostartdelete=3; int count=5; racers.removerange(indextostartdelete, count); foreach (Racer r in racers) Console.WriteLine(r.ToString());

Arama (Searching) Koleksiyon üzerinde arama yapmanın pek çok farklı yolu mevcuttur. Aranan elemanın indeksi veya kendisi elde edilebilir.

IndexOf(), LastIndexOf(), FindIndex(), FindLastIndex(), Find(), FindLast() gibi metotlar kullanılabilir. List<T> sınıfının Exists() metodu da kullanılabilir.

IndexOf () IndexOf() metodu parametre olarak bir nesneye ihtiyaç duyar ve geriye bu nesnenin koleksiyon içerisindeki indeks numarasını döndürür. Eğer eleman koleksiyon içinde bulunmuyorsa -1 değerini döndürür.

class Program static void Main(string[] args) Racer graham = new Racer("Graham", "Hill", "UK", 14); Racer emerson = new Racer("Emerson", "Fittipaldi", "Brazil", 14); Racer mario = new Racer("Mario", "Andretti", "USA", 12); Racer r1 = racers[3]; int index1 = racers.indexof(mario); Console.WriteLine(index1.ToString());

Sıralama (Sorting) List<T> sınıfı, Sort() metodu kullanarak sırlama işlemini sağlar. Sort() metodu arka planda quicksort algoritması ile sıralama gerçekleştirir. Sort() metodunun pek çok farklı overload u bulunmaktadır.

public void List<T>.Sort(); public void List<T>.Sort(Comparison<T>); public void List<T>.Sort(Icomparer<T>); public void List<T>.Sort(Int32, Int32, IComparer<T> Sort() metodunun pek çok farklı overload u bulunmaktadır. Eğer, koleksiyon IComparable<T> arayüzünü implement ediyorsa, herhangi bir parametre almadan da çağrılabilir.

Kuyruklar (Queues) Kuyruk, FIFO (First In, First Out) prensibine göre çalışmaktadır. Queue ve Queue<T> olmak üzere 2 farklı versiyonu mevcuttur. Queue<T> şablon kuyruk koleksiyonu, List<T> koleksiyonuna oldukça benzemektedir. Her iki veri yapısı da ICollection ve IEnumerable arayüzlerini implement ederler.

Koleksiyonun elemanlarına IList de olduğu gibi herhangi bir indeks kullanılarak erişmek mümkün değildir. Kuyruğa bir eleman eklenebilir(enqueue) veya çıkartılabilir (Dequeue).

Queue Koleksiyonuna ait Bazı Metotlar

Yığınlar (Stacks) Yığın, LIFO(Last in, first out) prensibine göre çalışmaktadır.

Stack Koleksiyonuna ait Bazı Metotlar

Yığın üzerindeki elemanları numaralandırıcı kullanarak okumak elemanların durumunu değiştirmez.

class Program static void Main(string[] args) Stack<char> alphabet = new Stack<char>(); alphabet.push( A ); alphabet.push( B ); alphabet.push( C ); foreach(char item in alphabet) Console.Write(item);

Bağlı Listeler (Linked Lists) Sadece şablon versiyonu olan koleksiyon türü LinkedList<T> dir. Bu koleksiyon doubly linked listedir.

Bu koleksiyonda, eğer elemanlar listenin ortasına eklenmesi işlemi oldukça hızlıdır. Böyle bir durumda, önceki elemanın Next referansı ve bir sonraki elemanın Previous referansı yeni eklenen elemanı gösterecek şekilde güncellenmektedir. List<T> ve ArrayList de ise yeni bir eleman eklendiğinde takip eden elemanların hareket ettirilmesi gerekmektedir. Bu ise performansı oldukça düşürecektir.

Eklemedeki bu avantaj, okuma işlemi sırasında dezavantaja dönüşebilmektedir. İstenilen elemanlara liste üzerinde sırasıyla hareket edilerek ulaşılabilmektedir.

LinkedList<T> koleksiyonu, ICollection<T>, IEnumerable<T>, ICollection, IEnumerable, ISerializable ve IDesializable arayüzlerini implement etmektedir.

Sıralı Listeler (Sorted Lists) Eğer sıralı bir listeye ihtiyacınız varsa, SortedList<Tkey, Tvalue> koleksiyonunu kullanabilirsiniz. Bu sınıf, bir anahtar değerine göre koleksiyondaki elemanları sıralar.

class Program static void Main(string[] args) SortedList<string, string> books = new SortedList<string, string>(); books.add(".net 2.0 Wrox Box", "978-0-470-04840-5"); books.add("professional C# 2005", "978-0-470-12472-7"); books["beginning Visual C# 2005"] = "978-0-7645-4382-1"; books["professional C# 2008"] = "978-0-470-19137-6";

Listenin üzerinde foreach ile hareket etmek mümkündür. Numaralandırıcı tarafından dönen elemanlar KeyValuePair<Tkey, Tvalue> türündedir.

class Program static void Main(string[] args) SortedList<string, string> books = new SortedList<string, string>(); books.add(".net 2.0 Wrox Box", "978-0-470-04840-5"); books.add("professional C# 2005", "978-0-470-12472-7"); books["beginning Visual C# 2005"] = "978-0-7645-4382-1"; books["professional C# 2008"] = "978-0-470-19137-6"; foreach(keyvaluepair<string,string> book in books) Console.WriteLine("0,1",book.Key,book.Value);

Sözlükler(Dictionaries) Sözlükler, bir anahtar değerini kullanarak herhangi bir elemana erişilmesini sağlayan karmaşık bir veri yapısıdır. Sözlükler, hash tables veya maps olarak da bilinirler. En temel özellikleri, bağlı oldukları anahtar değerine göre hızlı bir şekilde arama yapabilmeleridir (fast lookup).

.NET Framework pek çok dictionary sınıfını kullanıma sunmuştur. En bilineni; Dictionary<TKey, TValue> sınıfıdır. Bu sınıfın kullanımı SortedList<TKey,TValue> sınıfının kullanımına oldukça benzemektedir.

Diğer Dictionary Sınıflar