7 Eylül 2014 Pazar

Java Collections Soruları



    İş görüşmelerinde en önemli şeylerden biri de sorulan sorulara güzel ve net cevap verebilmektir. İşte bu sorulardan bazılarını bulup kendimce cevapladım. İleride mutlaka işinize yarayacaktır.

1- Koleksiyonları Nasıl Sıralarsınız? 
  Kitaplar adında bir listemiz olsun.
 List<Kitaplar>  kitaplar = new ArrayList<Kitaplar>();


 Bunu direkt olarak  Comparable arayüzünü implement ederek sıralayabiliriz. Kitaplar sınıfı şöyle olsun;

package com.cengfurkan.Collections;

public class Kitaplar implements Comparable {
 private int seriNo;

 public Kitaplar(int seriNo) {
  this.seriNo = seriNo;
 }

 @Override
 public int compareTo(Kitaplar k) {
  return new Integer(this.seriNo).compareTo(o.seriNo);
 }
}
  


Sıralamak istediğimiz zaman;
 Collections.sort(kitaplar); 



Ya da Comparator da kullanabiliriz;
Comparator<Kitaplar>  comparator = new Comparator<Kitaplar>(){
   public int compare(Kitaplar k1, Kitaplar k2){
       return k2.seriNo - k1.seriNo;
     }
};

Collections.sort(kitaplar, comparator); 




2) List'i Set'e Çevirmenin En İyi Yolu 
Eğer listemizdeki elemanlardan sadece birer tane olsun istiyorsak bu durumda onu herbir elemandan birer tane bulunacağını garanti eden Set'e çevirmeliyiz.
Kitaplar sınıfından devam edelim, yine bir kitaplar listemiz olsun;



 List<Kitaplar>  kitaplar = new ArrayList<Kitaplar>();


Bunu Set'e çevirmek için;
 Set<Kitaplar>  kitaplarSeti = new HashSet<Kitaplar>(kitaplar);
kitaplarSet.addAll(kitaplar);  //Kitaplar parametresi yazmak yerine böyle de yazabiliriz. 


3) equals() ve hashCode()

Bu metodları  objeleri karşılaştırmak için kullanıyoruz. equals objelerin eşit olup olmamasına bakarken, hashCode metodu ise her örneğin içinde bulunduğu 32 bitlik işaretli bir integer değerini gösterir. Eğer equals metodunu override edersek hashCode metodunu da override etmemiz gerekir.

4) ArrayList ile Vector Farkı
       Vector(bundan sonra vektör olarak geçecek) ile ArrayList birbirine benzese de aralarında belirgin farklar vardır.
  • Vektörler senkronize iken ArrayListler asenkronizedir.
  • Haliyle vektör thread-safe iken ArrayList değildir.
  • Senkronize olduğu için vektör yavaş iken ArrayList daha hızlıdır.
  • Boyutları artarken vektör boyutunu iki katına çıkarır ArrayList ise %50 arttırır.
5) Priority Queue Nedir?
      Bana kalırsa basit bir soru, tek cümleyle cevap verebiliriz. "İstediğimiz bir şekilde sıra elemanlarını sıralamamıza yarayan sıra".  Bunu yaparken sıra(queue) örneğini oluştururken inner class olarak comparator referansı da oluşturup öyle yapabiliriz.

6) HashTable ve HashMap
      HashTable ile HashMap de birbirine çok benzeyen iki koleksiyon. Fakat vektör ve arraylistte olduğu gibi burada da birkaç fark mevcut.
  • HashTable senkronize, HashMap değil.
  • HashTable daha yavaş(senkronize olduğu için)
  • Haliyle HashTable thread-safe, HashMap değil.
  • HashMap,  HashTable'dan sonra biraz özelleşerek çıktı. (Yanlış hatırlamıyorsam HashTable JDK 1.0 ile, HashMap ise 1.2 ile gelmişti)
  • HashMap'i  de Collections.synchronizedMap(HashMap)  metoduyla senkronize edebiliyoruz.

0 yorum:

Yorum Gönder