Java'da Veri Saklamaya Yardımcı Kütüphaneler

Java'da Veri Saklamaya Yardımcı Kütüphaneler

Daha önceki bölümlerde Java'da diziler konusunu görmüştük. Bu bölümde ise Java'nın veri saklamak için sunduğu bazı özel sınıflardan bahsedeceğiz. java.util kütüphanesi altında bulunan bu sınıflar, klasik dizilerin bir takım sınırlamalarını ortadan kaldırırken dizi içerisinde arama, silme gibi ek özellikler de sağlamaktadır.
Java'da basit bir dizi örneğine göz atalım.
Aşağıdaki örnekte 0 - 9 arası elemanların tamamı eklenmiş kabul edilsin:
String[] strArr = new String[10];
strArr[0] = "Ahmet";
strArr[1] = "Ayşe";
strArr[9] = "Mehmet";
Şimdi ise aşağıdaki soruları nasıl yapacağımızı düşünelim;
  • Bu dizinin içinde Arzu diye bir string var mıdır?
  • "Ayşe" değerini diziden çıkarmanın yolu nedir? Eleman çıkarıldıktan sonra dizin (index) nasıl yeniden düzenlenir?
  • Dizide değeri atanmış kaç adet eleman yer alır?
  • 11. eleman eklenmesi gerektiğinde ne yapılmalıdır?
Yukarıdaki sorular artırılabilir ancak hiçbiri yeni bir metod yazmadan yapılamaz. İşte bu noktada Java içerisinde yer alan List Interface yardımımıza koşar. Bu eğitimlerin ayrıntılarına alt başlıklardan ulaşabilirsiniz. 

List

List Interface, kullanıcılara sıralanmış bir dizi hazırlama olanağı sunar. Oluşturulan diziler istenilen sınıfta obje saklayabildiği gibi kapasiteleri de önceden belirlenmek zorunda değildir. Bununla beraber bu Interface'i kullanan sınıflar aşağıdaki metodlara sahiptir;
  • add (E e): Bir objeyi listeye ekler.
  • add (int index, E e): Bir objeyi listede istenen dizine (index) ekler.
  • clear: Bütün elemanları siler.
  • contains: Bir objenin dizi içerisinde olup olmadığını kontrol eder.
  • get (int index): Dizi içerisinde belirli bir dizindeki objeyi verir.
  • remove (E e): Belli bir objeyi siler.
  • remove (int i): Belli bir dizindeki objeyi siler ve dizini günceller.
  • size: O anda dizide kaç adet eleman olduğunu söyler (add metodu ile eklenmiş).
  • subList (int from, int to): İki dizin arasındaki elemanlardan yeni bir dizi oluşturur.
  • set (int index, E element): Belli bir dizindeki objeyi yenisiyle değiştirir.
Görüldüğü gibi List Interface'i veriyi dizi içerisinde saklama konusunda bize birçok kolaylık sağlar. Şimdi bu Interface'i kullanan ArrayList adlı sınıfı çeşitli örneklerle anlatalım;
List<String> arrList = new ArrayList<String>();
arrList.add("Osman");
arrList.add("Ayşe");

Yukarıdaki örnekte yeni bir dizi oluşturuyoruz ve bu diziye add metodunu kullanarak çeşitli elemanlar ekliyoruz. 
Bir ArrayList içerisindeki elemanları görüntülemek için foreach döngüsünü aşağıdaki gibi kullanabilirsiniz:

for(String str : arrList) {
    System.out.println(str);
}
Burada eğer ilk değerin önüne bir eleman ekleyeceksek aşağıdaki metodu kullanmamız gerekmektedir;

List<String> arrList = new ArrayList<String>();
arrList.add("Osman");
arrList.add("Ayse");
arrList.add(0, "Ozan");

Bu şekilde “Ozan” objesi “Osman” objesinin önüne geçmiş olur.
Belirli bir obje dizi içerisinde mevcut mu sorgusu aşağıdaki gibi gerçekleşmektedir:

List<String> arrList = new ArrayList<String>();
      arrList.add("Osman");
      arrList.add("Ayse");
      arrList.add(0, "Ozan");
      if(arrList.contains("Osman")) {
         System.out.println("Osman bulundu");
}
Liste içerisindeki eleman sayısını öğrenmek için size metodundan faydalanmaktayız. Aşağıdaki örnekte liste önce clear metoduyla başaltılır, ardından size metoduyla boşaldığı kontrol edilmektedir.

List<String> arrList = new ArrayList<String>();
   arrList.add("Osman");
   arrList.add("Ayse");
   arrList.add(0, "Ozan");      
   arrList.clear();      
   if(arrList.size() == 0) {
      System.out.println("Liste bos!");
}
ArrayList sınıfını Android uygulamaları hazırlarken sık sık kullanacağız.

Map

Java'da sıkça kullanılan bir diğer veri saklama yöntemlerinden diğeri de Map Interface sınıfı kullanımıdır. Bu sınıflar verileri anahtar - değer mantığına göre saklamaktadır. Bir obje Map içerisine eklenirken bu objeyi işaret eden bir anahtar kullanmaktadır. Obje çekilmek istediğinde bu anahtar değeri sorgulanır ve obje hızlı bir şekilde diğer objeler arasından getirilir.
Map Interface'i kullanan sınıflar aşağıdaki metodlara sahiptir;
  • clear: Map içinde bulunan bütün değerleri siler.
  • containsKey (Object key): Belli bir anahtar daha önceden girilmiş mi sorgular.
  • containsValue (Object value): Belli bir obje daha önceden girilmiş mi sorgular.
  • get (Object key): Anahtara karşılık gelen objeyi döndürür.
  • put (Object key, Object value): Anahtar - değer ikilisini kayıt eder.
  • remove (Object key): Belli bir anahtara karşılık gelen değeri siler.
  • size: O zaman kadar kayıt edilmiş anahtar - değer ikili sayısını verir.
Şimdi sizlere HashMap sınıfını kullanarak bir kullanıcı ile ilgili değerler saklayan bir Map dizisi oluşturacağız.
Map<String,String> userMap = new HashMap<String, String>();
      userMap.put("email", "ahmet@example.com");
      userMap.put("name", "Ahmet Zan");
      userMap.put("address", "İstanbul 34000");
      userMap.put("mobile", "5322100000");
Yukarıdaki örnekte userMap adında bir değişken içerisinde Ahmet Zan adında hayali bir kullanıcıya ait bilgiler anahtar - değer ikilileri halinde saklanmıştır. Daha sonra kullanıcıya ait bir bilgiye ulaşmak istediğimizde ilgili anahtarı girmemiz yeterli olacaktır;

Map<String,String> userMap = new HashMap<String, String>();
      userMap.put("email", "ahmet@example.com");
      userMap.put("name", "Ahmet Zan");
      userMap.put("address", "Istanbul 34000");
      userMap.put("mobile", "5322100000");
      System.out.println("Kullanici adresi " + userMap.get("address"))
Aşağıdaki örnekte ise belli bir anahtarın sorgulanmasını görüyoruz;

Map<String,String> userMap = new HashMap<String, String>();
      userMap.put("email", "ahmet@example.com");
      userMap.put("name", "Ahmet Zan");
      userMap.put("address", "Istanbul 34000");
      userMap.put("mobile", "5322100000");
      System.out.println("Kullanici adresi " + userMap.get("address"))
Bir Map içerisinde yer alan bütün anahtar - değer ikililerini yazdırmak isterseniz bir foreach döngüsünden faydalanabilirsiniz.

for(Map.Entry<String, String> pairs : userMap.entrySet()) {
         System.out.println(pairs);
}
HashMap'leri Android konuları içerisinde sıklıkla kullanacağız.

Set

List Interface'ine benzeyen Set, verilen verileri bir dizin (index) kullanmadan saklamaktadır. Aynı zamanda Set arayüzü aynı elemanı iki kere saklamaya izin vermemektedir.
Set Interface'ini kullanan sınıflar aşağıdaki metodları içermektedir;
  • add (Object o) : Dizi içerisine bir eleman ekler.
  • clear: Dizi içerisindeki bütün elemanları siler.
  • contains (Object o): Bir eleman dizi içinde mi kontrol eder.
  • remove (Object o): Bir elemanı siler.
  • size: O ana kadar kaç eleman eklendiğini döndürür.
Aşağıdaki örnek bir TreeSet sınıfı kullanımını göstermektedir;
 Set<String> treeSet = new TreeSet<String>();
      treeSet.add("Osman");
      treeSet.add("Ayse");
      treeSet.add("Osman");
      for(String str : treeSet) {
         System.out.println(str);
      }

Yukarıdaki örnekte add metodu kullanarak değerler eklenmekte ve foreach döngüsü ile bu değerler konsola basılmaktadır.

treeSet içerisine iki adet "Osman" objesi eklenmesine rağmen konsolda sadece bir tane "Osman" değeri görülmektedir. Bunun sebebi Set Interface'ini kullanan sınıfların aynı objeden sadece bir tane saklamasıdır. 

İlerleyen dönemlerde Android uygulamaları içerisinde Set Interface'i ile ilgili örnekler kullanacağız.

Yorumlar

Bu blogdaki popüler yayınlar

İç İçe Döngüler

CSS Bir Elemanın Genişliği ve Yüksekliği

JavaScript Dilinde Fonksiyon Çağırma Teknikleri