• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 23.04.2016 00:55:33C programlama 2 oyun
  • 20.04.2016 16:34:41Local Database
  • 15.04.2016 14:26:15Fatura kayıt işlemi
  • 21.03.2016 01:55:30C# problem

Popüler Sorular

  • 27.05.2012 05:49:50Asp.Net ile Date time alana veri ekleyemiiyorum ?
  • 2.04.2012 00:45:18.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 12.05.2012 08:44:49Acil Yardım
  • 27.05.2012 13:46:51veri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LINQ
  • LibreOffice
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

C#.Net- HashTable Collection

Merhaba değerli Programcı / Yazılımcı arkadaşlar, Bu yazımızda C#.Net programlama dilinde Genel Amaçlı Koleksiyon Sınıfları olan Classes Collection sınıfının üyesi HashTable Koleksiyonu konusunu ele alacağız.

15.08.2012

Yazar: Muhammed ÖNAL (Google+)

Kategori: C#.Net

8825

 

C#.Net- HashTable Collection

Merhaba değerli Programcı / Yazılımcı arkadaşlar,

Bu yazımızda C#.Net programlama dilinde Genel Amaçlı Koleksiyon Sınıfları olan Classes Collection sınıfının üyesi HashTable Koleksiyonu konusunu ele alacağız. Burada ele alacağımız HashTable koleksiyonu ile bir sonraki makalemizde sizlerle C#.Net Uygulamalı Projeler II kapsamında başlatmış olduğumuz uygulama yazılımlarında nasıl kullanılacağına dair kaynak kodlarımızı inceleme fırsatı elde edebileceksiniz.Hashing proje ve tasarılarını iyi anlamak için Bilgisayar Bilimlerinde okuyan öğrencilerin veya Bilgisayar Bilimi alt dallarından biriyle uğraşan arkadaşların Data Structure & Algorithms (Veri Yapıları ve Algoritmalar) dersini eksiksiz bir biçimde bitirmeleri gerekmektedir.

Evet, değerli meslektaşlarım ve meslektaş adaylarım J fazla zaman kaybetmeden yazımıza giriş yapalım.

Şimdi dilerseniz, konumuza giriş yapmadan önce hashTable koleksiyonun üye sınıfı olduğu Genel amaçlı koleksiyon sınıfları hakkında kısa bir açıklama yaparak başlayalım. Çünkü yukarıda bahsettiğimde hemen sizlerin nedir bu Genel Amaçlı Koleksiyon Sınıfları ve Ne işe yararlar? Gibi soruları sorduğunuzu duyar gibiyim J

Koleksiyon sınıfları üç temel alt bölüme ayrılmıştır. Bu alt bölümleri maddeler halinde verecek olursak:

-          Genel Amaçlı

-          Bit Tabanlı

-          Özel Amaçlı

Olarak sıralayabiliriz.

Bunlardan;

Genel Amaçlı Sınıflar, herhangi bir tipteki nesneleri saklamak amacıyla kullanılabilirler. Eğer bizler Genel Amaçlı Sınıfları da bir tablo halinde verecek olursak, aşağıdaki gibi bir tablo ortaya çıkacaktır.


Sınıf (Class)


Açıklama

ArrayList

Dinamik dizi olarak bilinir. Aynı zamanda gerektiğinde genişleyebilme özelliğine sahiptir.

HashTable

Anahtar/Değer çiftleri için “Hash” tablosu

Queue

İlk giren –ilk çıkar (FIFO) işleyişine sahip olan listedir.

SortedList

Anahtar/Değer (Key/Value) çiftlerinin sıralı listesidir.

Stack

İlk giren-Son çıkar işeyişine sahip olan listedir.

 

Tablomuz yukarıdaki şekilde ki gibidir. Biz bu Genel amaçlı koleksiyon sınıf üyelerinden HashTable koleksiyonu ele alacağız.

Koleksiyonlarla çalışırken İsim uzayı(namespace) alanında aşağıdaki ifadeyi tanıtmamız gerekir.
using System.Collections;

HashTable

Nesne Tabanlı Programlama dilleri yeni tipler oluştururken oldukça kolaylık sağlarlar. Bir program, mevcut olan ya da yeni tiplerin nesnelerini oluşturduğu zaman, bu nesnelerin verimli yönetilmesine ihtiyaç duyarlar. Bu nesnelerin alınmasını ve sıralanmasını içerir.

HashTable, depolama için bir hash tablosu kullanan bir koleksiyon oluşturan genel amaçlı koleksiyon sınıfının bir üyesidir.

Bir Hash Tablosu, hashing denilen bir mekanizmayı kullanarak bilgileri saklama işlemini yapar. Hashing’de bir anahtarın bilgi taşıyan içeriği, hash kod denilen benzersiz(unique) bir değeri belirlemek için kullanılır. Hash kod daha sonra bu anahtar ile ilişkili verilerin tablo içinde saklanacağı konumun indeksi olarak kullanılır.

NOT: Anahtarın, karşılık gelen hash koduna dönüşümü otomatik olarak gerçekleşmektedir. Ve burada asla hash kodu görülmez.

Avantajı: Hashing’in en büyük avantajı hiç kuşkusuz; arama, alma ve ayarlama işlemlerinin çalışma sürelerinin büyük kümeler için bile sabit olarak kalmasına olanak tanımasıdır.

Bir Hash Fonksiyonu, hashTable içindeki verinin yerini tanımlamayı ve hesaplamayı yapar. Yukarıdaki tablomuzda da HashTable için gerekli açıklamayı şu şekilde yapmıştık, “Anahtar/Değer çiftleri için “Hash” tablosu” işte hash fonksiyonu da bir nesnenin Anahtar/Değer (key/value) çiftlerine uygulanmasıdır. HashTable Sınıfı herhangi bir nesneyi bir anahtar olarak kabul edebilir. Bunun sonucu olarak şunu söyleyebiliriz, C# dilinde miras olarak bütün nesneleri GetHashCode metodu Object(Nesne) sınıfını tanımlar.

HashTable; IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallBack ve ICloneable arayüzlerini(interfaces) uygular.

Örnek verecek olursak;

Public Hashtable()

Public Hashtable(IDictionary c)

Public Hashtable (int Capacity)

Public Hashtable (int Capacity, float RateofFull)

 

 

Yukarıdaki ifadeleri açıklayacak olursak,

Public Hashtable() , varsayılan Hashtable’ın constructor’u dur. Yani yapılandırıcısıdır.
Public Hashtable(IDictionary c) , c’nin elemanlarını kullanarak Hashtable’a başlangıç değeri atar.
Public Hashtable (int Capacity),  Hashtable’ın kapasitesini Capacity olarak ayarlar.
Public Hashtable (int Capacity, float RateofFull), bu ifademiz ise hem kapasiteye hem de doluluk oranına ilk değeri atamış olur. Doluluk oranı ( buna yük faktörü(Load factor) de denir) 0.1 ile 1.0 arasında olmalıdır. Doluluk oranı, hash tablosunun yukarı yönde yeniden boyutlandırılmasından önce ne kadar dolu olacağını belirler. Doluluk oranı almayan constructor’lar için 1.0 değeri kullanılır.

 

Performans:



Bir hash tablosu içinde Yük faktörü (Load Factor) , bir space/time trade-off ‘un klasik örneğidir. Yük Faktörünün artışı ile daha iyi Memory(Hafıza) kullanılır, fakat hashing çakışmaları azalarak programın yavaşlamasına neden olur. Yük Faktörünün azalması ile daha iyi program hızını elde ederiz çünkü hashing çakışmalarını en aza indirgemiş oluruz, fakat bunun yanında memory kullanımı yetersiz olur. Çünkü hash table’ın büyük bölümü boş kalır.

 

 

 

 

Hashtable için yukarıda belirttiğimiz Hashtable’ın uyguladığı arayüzler(Interfaces) tarafından tanımlanan metotlar dışında HashTable kendisi de birkaç metot tanımlamaktadır. Şıkça kullanılan metotlardan bazılarını aşağıdaki tablomuzda inceleyebilirsiniz.

HashTable tarafından tanımlanan Sıkça kullandığımız Metotlardan bazıları

   

Metot

Açıklaması

Public virtual bool

ContainsKey(object k)

k, çağrıda bulunan Hashtable içinde bir anahtar ise true döndürür. Aksi takdirde zaten false döndürür.

Public virtual bool

ContainsValue(object v)

v, çağrıda bulunan Hashtable içinde bir değer ise true döndürür. Aksi takdirde false döndürür.

Public virtual IDictionaryEnumerator

GetEnumarator()


Çağrıda bulunan Hashtable için bir IDictionaryEnumerator döndürür.

Public static Hashtable

Synchronized(Hashtable ht)

ht üzerinden aktarılan Hashtable’ın senkronize edilmiş versiyonunu döndürür.

 

Bunlara ek olarak , Hashtable’ın eklediği iki açık özellik daha mevcuttur. Aşağıda vereceğimiz bu özellikleri kullanarak HashTable’ın anahtarlarından ya da değerlerinden oluşan bir koleksiyon elde edebiliriz.

Public virtual ICollection Keys { get;}
Public virtual ICollection Values{ get;}

 

 

Şimdi dilerseniz bir örnek uygulama ile Hashtable’ı daha da anlaşılır hale getirelim:

Örnek UYGULAMA:
Bu örnek uygulamamızda System.Collection isim uzayının Hashtable sınıfını gösterelim .

Projemiz bir Windows Form uygulaması olacaktır. Projemizin dili C# dili olacaktır. Formumuza aşağıdaki kontrolleri ekleyelim: ve Form yapısı aşağıdaki ekran görüntüsü şeklinde olacaktır.

      ->  8 tane buton kontrolü
      ->  3 Textbox( 1 tanesi Multiline özelliğine sahip), 3 tane label ekleyelim.

      Bu kontrollerimimizin name property’lerini ise aşağıdaki gibi düzenleyelim:

      ->  label :  lblFirstName
      ->  label :  lblLastName
      ->  label :  lblStatus
      ->  textBox : txtFirstName
      ->  textBox : txtLastName
      ->  textBox : txtConsole
      ->  button :  btnAdd
      ->  button :  btnRemove
      ->  button :  btnContainsKey
      ->  button :  btnListObjects
      ->  button :  btnGet
      ->  button :  btnEmpty
      ->  button :  btnClearTable
      ->  button : btnListKeys


Örnek Uygulamamıza ait Form Tasarımımız ise aşağıdaki gibi olacaktır:

Projemizin Programatik sayfasında kodlarımızı yazmaya geçmeden önce; İsim uzayı(namespace) alanında  using System.Collections; isim uzayını tanıtmamız gerekir.

 

Hemen ardından yapmamız gereken,partial class alanında HashTable fonksiyonelliğini göstermemiz ve HashTable nesnesini oluşturmamız gerekir.

Uygulamamızdaki btnAdd_Click()  Event Handler ‘ı açıklayalım ve gerekli kodlarını vererek nasıl bir işlem gerçekleştirdiğini görelim:

Kullanıcı arayüzündeki (user interface) First Name ve Last Name alanlarından bir işçiye ait İsim ve Soyisimi okur ve class Employee (Employee sınıfının ) nesnesi oluşturulur ve daha sonra Add metotu ile Employee ‘ye ait bilgiler HashTable’a eklenir.
Kullanıcı arayüzünde isim ve soyisim alanlarını doldurarak Add Metotu ile eklemiş olduk.


 

Ekran görüntümüze ait C#.Net kodlarımız ise aşağıdaki gibidir.

 

NOT:
Bu method (Add) iki arguman alır.
Bir Key (Anahtar) nesnesi, diğeri Value(Değer) nesnesi. Key bir Employee (bir string)’nin Last Name’dir. Value ise Employee nesnesine uygundur.

Şimdi eklediğimiz bu isim ve soyisim alanındaki işçilere ait bilgileri btnListObjects_Click() Event Handler ile eklediğimiz bu nesneleri txtConsole textBox kontrolünde liste halinde göstereceğiz.

Burada, HashTable içindeki nesnenin enumerator’ün çıktısında  Value(değer) özelliği kullanılmıştır.

 

 

Ekran çıktımıza ait C#.Net program kodlarımız aşağıdaki gibidir.

 

btnListkeys_Click() Event Handler ile List Keys butonuna tıkladığımız da Konsol texbox’ında sadece LastName olan Employee nesnesinin soyadları listelenmiş olur.

Ekran çıktımıza ait C#.Net program kodlarımız aşağıdaki gibidir.

Burada, HashTable içindeki nesnenin enumerator’ün çıktısında Key(Anahtar) özelliği kullanılmıştır.

 

Not: Diğer Button_Click() olaylarına ilişkin kullanıcı arayüzünde nasıl bir durumun oluştuğunu görmek için ise Projemizi yazımızın sonunda download ederek. İnceleyebilirsiniz.

 

Class Employee oluşturmak için Visual Studio IDE’sin de Add new item kullanarak Projemize bir Class dosyası ekliyoruz. Ve Class’mızın adı Employee olacaktır.  Nesnemize ait kaynak kodlarımız ise aşağıdaki gibidir.

Diğer işlemlere ait kodlarımızı ve Uygulama,
Projemizi bu linkten download edebilirsiniz.

 

Bugünlükte bizden bu kadar diyor ve makalemizin sonuna gelmiş bulunuyoruz. Kafanıza takılan soru işaretleri var ise mail yoluyla sorularınızı iletebilirsiniz.

Yazılım ve Programlama aşkı ile tutuştuğumuz bir sonraki yazımızda görüşmek dileğiyle.

 NOT:
Bu makalemizde de gerek yerli gerek yabancı kaynakları tarayarak ve gerek kendi bilgi ve tecrübelerimizden kattığımız Programlama dünyasında Classes Collection sınıfına ait olan HashTable hakkında da bilgiler verdik. Ve yazımızın sonunda da Projemizi sizler için ekleyerek Download’ınıza sunmuş olduk. Programlama dünyasının bu büyülü dünyasına adım atan arkadaşlara yol gösterici olması amacıyla faydalı olması dileğiyle. Bir sonraki makalemizde görüşmek dileğiyle şimdilik hoşça kalın.

Kaynak:  Muhammed ÖNAL,2012. NET Programming languages  & Examples & Projects
               Visual C# 2010 How to Program, Deitel
              


Saygılarımla;

Muhammed ÖNAL
Bilgisayar Mühendisi
RFID Sistemleri Uzmanı
BT Yönetişimcisi

Blog:  http://www.muhammedonal.com
Web : http://www.yazilimdilleri.net


Copyright © Muhammed ÖNAL , 2012 

 

 

 

 

Yazar Hakkında

Muhammed ÖNAL

Muhammed ÖNAL

www.muhammedonal.com

Bilgisayar Mühendisi | RFID Sistemleri Uzmanı | BT Yönetişimcisi | Strateji Planlama ve İş Geliştirme 2015 itibariyle sağlık sektöründe Bilgi Sistemleri Yöneticisi ve Üst yönetim Stratejik Planlama ve İş Geliştirme Koordinatörü pozisyonunda çalışmaktadır.

Sosyal Medya

ORANLAR

  • 8825izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Hocam Link başka sayfaya yönlendiriyor.
  • merhaba benim merak ettiğim bir konu var y...
  • Merhaba download linki çalışmıyor. Rica et...
  • Nevzat Bey selamlar, Açıkçası bizler a...
  • Parametreleri Cache İşleminden Yalıtma kon...

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 120152
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 65269
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 48392
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ