array etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
array etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

22 Ocak 2015 Perşembe

ArrayList

       S.a. Arkadaşlar,
       Bugünkü konumuz ArrayList olacak. Dizileri hepimiz biliyoruzdur. Dizilerde ne yapıyorduk eleman tutuyorduk,siliyorduk vs fakat burada bir diziye tek bir tip değişken atayabiliyorduk. Mesela int[] a= new int[size]; diyorduk ve sadece intenger tanımlayabiliyorduk. Fakat arraylistlerde farklı tipleri tanımlama olanağı sağlar fakat siz bunu istemezseniz jenerikler ile de kısıtlama yapabiliyorsunuz. Jenerik konusunu ileri ki konularda anlatacağız inşallah, fakat bir nevi tip kısıtlaması dersek şuan için bize yeterli olacağını düşünüyorum. Ayrıca arraylistler dinamik yapılardır. Eleman ekledikçe genişleyen sildikçe küçülen yapılardır. Dizilerde sabit bir boyut veriyorduk bildiğiniz gibi ve bundan fazla eleman ekleme şansımız olmuyordu. Daha az eleman eklediğimizde ise boşuna bellekte yer tutmuş oluyoruz. ArrayListlerin böyle bir avantajı da var. Son olarak eleman silme gibi işlemler veya araya eleman ekleme gibi konularında diziler için ekstra kod yazmanız gerekirken ArrayListler bunu kendisi hallediyor ve size bir zorluk çıkarmıyor. Sayılar ve String için sıralama yapabiliyor, fakat farklı objeler için sıralama yapamıyor. Mesela bir Car sınıfımız var , onun için farklı yöntemler var onları da ileride nasip olursa anlatırız. Şimdilik teknik olarak söyleyeceklerimiz bunlar. Kodlar içerisinde eksik gördüğümüz yerleri yine anlatmaya çalışacağız. Şimdi yavaştan kod kısmına geçelim.

public static void main(String[] args) {
ArrayList myArrayList = new ArrayList();
// ArrayList'e elemani add metodu ile ekleyebiliriz.
myArrayList.add(10);
myArrayList.add((short)20);
myArrayList.add("test");
        myArrayList.add(true);
        myArrayList.add(new Test());//paketismi+sıfınismi+@id
myArrayList.set(2, "new set text");//set ile indexteki elemani override
myArrayList.add(1, '#');//overload ile yeni eleman ekleyebiliriz
       //set ile farkı elemanı üzerine yazılmaz, elemanı aşağı kaydırır.
for (Object obje: myArrayList) {
System.out.println(obje);
}
             
        boolean isEmpty = myArrayList.isEmpty();//ArrayList Boş mu,boşsa true
int size = myArrayList.size(); // kaç elemanlı
        System.out.println(isEmpty + " Eleman Sayısı: " + size);
             
        boolean b= myArrayList.contains(20);//burada int olduğu için false
        boolean b2= myArrayList.contains((short)20); //short olduğundan true
        boolean b3= myArrayList.contains("10"); //yukarıda int burada String!
        System.out.println(b+ " " + b2+ " " + b3);
             
       int indexOf = myArrayList.indexOf(10); //indexini atar
       int indexOf2 = myArrayList.indexOf(20); //int olduğundan -1 döndürür
       int indexOf3 = myArrayList.indexOf((short)20);
       System.out.println(indexOf + " " + indexOf2 + " " + indexOf3);
             
      myArrayList.remove(0); //index siler
      System.out.println("0.eleman Silindikten Sonra:" + myArrayList.size());
      myArrayList.clear(); //tüm arraylisti siler
     System.out.println("Dizi tamamen silinince" + myArrayList.size());
     //şimdi diziyi tekrar yazdıralım,görüldüğü üzere birşey yazmaz
     for (Object obje: myArrayList) {
     System.out.println(obje);
      }
}

      Peki biz array ile arrayList arasında herhangi bir dönüşüm yapabilir miyiz diye bir soru sorarsak onun da cevabı evet olacak. Her iki dönüşüme de izin veriyor. Bunun için birden fazla yol olabilir fakat biz kendiliğinden gelen toArray ve asListleri kullanacağız. Bu iki yöntem arasında farklar vardır. Bunları burada söylemektense kod içerisinde uygularken yorum satırlarıyla desteklemeyi tercih edelim.

public static void main(String[] args) {
     String[] namesArray = { "names1", "names2", "names3", "names4" };
      List namesList = Arrays.asList(namesArray);
      // Arrays -> List dönüşümü yapıyoruz

for (String str : namesArray) {
System.out.print(str + " ");
}
             
// List'teki elemani guncellersek otomatik olarak
                //dizi arraydeki eleman da guncellenecektir.
                //fakat toArray ile güncellenme olmayacaktır
namesList.set(0, "set new names1");
             
                System.out.println("");
for (String str : namesArray) {
System.out.print(str + " ");
}
// namesList.add("java.lang.UnsupportedOperationException");
                //bu şekilde eleman eklemeyiz fakat to Array bu böyle değildir
             
}

NOT: adList ile toArray görev olarak aynı olsa dahi özellik olarak birbirlerinin tersi gibidirler. Kodun içinde gerekli açıklamaları yapmaya özen gösterdik. Yazımızı burada son veriyor , iyi çalışmalar diliyoruz.

22 Aralık 2014 Pazartesi

Diziler

                Bugünkü yazımızda dizileri ele alacağız. Dizilerin bu işle ilgilenen herkes az çok nedir, neden kullanılır gibisinden bir şeyler biliyordur. Biz de hem bildiklerimizi bir gözden geçirmek hem de birkaç ince noktasını gözden geçirmek istiyoruz.
                Peki nasıl tanımlanır bu diziler diye bir bakalım
int[] dizi veya int dizi[] olarak tanımlayabiliriz fakat bu işin standardı olarak görülen ilk tanımlamadır, fakat ikinci tanımlama da hata vermez.
int[] dizi= new int[10]; burada dizimizin boyutunu belirlemiş oluyoruz. 10’dan fazla değer girdiğimizde derleyici bize hata verecektir. Peki 2 boyutlu bir dizi tanımlamak istersek ne yapmamız gerekecek. Hemen onu da kodlayalım.
String[][] dizi= new String[10][]; burada String dizisi oluşturduk 2 boyutlu olarak , eğer 2den fazla oluşturmak istersek sağına ve soluna eşit sayılarda köşeli parantezler ekliyoruz. Şimdi biraz daha 2 boyutlu diziyle ilgili bir şey söyleyelim. Aşağıdaki kodu incelerken yanına not edelim söyleyeceklerimizi.

            int [][] myArray = new int[3][];
            myArray[0] = new int[3]; // 0.nci elemana 3 elemanlı bir dizi atıyoruz
            myArray[0][0] = 6;
            myArray[0][1] = 7;
            //myArray[0][2] = 0; burada tanımlanadığımız halde otomatik 0 olur
            myArray[1] = new int[3];
            myArray[1][0] = 9;
            myArray[1][1] = 8;
            myArray[1][2] = 5;
            myArray[2]=new int[3]; //3 satırdaki tüm elemanlar sıfır olacak
            for(int i=0; i<2;i++){
                for(int j=0; j<3;j++){
                    System.out.print(" "+myArray[i][j]);
                }
                   System.out.println("");
            }

Çıktı:
6 7 0
 9 8 5
 0 0 0

                Son olarak da dizinin başlangıçta değer nasıl atanır ona bakıp dizi yazımıza son verelim. Onu da şu şekilde yapabiliriz.

int [] ages2= new int[]{20,30,40,50}; // değerleri burada girdiğimiz zaman dizinin boyutuna herhangi bir değer girmiyoruz, yoksa derleyici hata verecektir.

int [] ages2= new int[4]{20,30,40,50}; //error

Peki bu dizi birden fazla boyutlu olursa nasıl tanımlama yapacağız

int[][] scores = { 2, 4, 5 }, { 10, 20, 3, 9 }, { 4 }, {} }; // dikkat ettiyseniz burda new int[] gibi bir tanımlama yok, yani bunu koymak opsiyonel birşeydir. Seçeneğe bağlı. New [][] koysak da olur, derleyici hata vermeyecektir.