Friday, July 23, 2010

Array

 * Array(Dizi) belli bir sayida ve ayni veri turundeki degiskenlere  ayni isim altinda erismeyi saglayan 'Referans' lardir.
 * Diziler 'Referans'  tipli degiskenlerdir. Dolayisiyle bir dizi belegin 'stack(Yigin)' kisminda tutulurken dizi elemankarinin tamami 'heap(Obek)' kisminda tutulur. Yani dizinin adi 'heap' teki elemanlarin baslangic adreslerini isaret eder.
 * Diziler ayni turden elemanlara sahip olmak zorundadir.
 * Diziler olusturulunca eleman sayilari ayni anda verilir. Boylece bir dizi en bastan boyutlandirirlir dizinin boyutu ile dinami olarak oynamamizi engellenir.Bu kisitlama Java dilinde Collection(List , Map, HAshMap, .....) sinifinin olusmasi ve gelismesini saglamistir.
  *  Referans tipli dizilerin nasil olusturuldugunu inceliyelim. Bir dizinin Referans tipli olmasini saglamk icin 'new' anahtar socuyunden istifade edilir.
 *  Tanimimizin en basindada dedigimiz gibi diziler Referans tipli degikenlerdir. Dolayisiyla bir sinif ornegi olusturmak zorunda.
int dizi[]= new int[3];
int[] dizi= new int[3];
Yukaridaki olusturdugumuz dizini 3 elemani var. Dizinin baslangic elemeni SIFIR '0' dir.Dizinin 3 elemanni var ve ilk ilemani 0 ise son elemani 2 dir
0,1,2,.....,n-1
int dizi[]= new int[3];
dizi[0] = 10;
dizi[1] = 20;
dizi[2] = 30;
for(int i=0;i
      System.out.println(dizi[i]);
}

//CONSOLE
10
20
30

 *   Diziyi new anahtar sozcuyu ile kullanabilecegimiz gibi baska yol daha var
int dizi[] ={1,5,7,-1,11,2};
for(int i=0;i<6;i++){
      System.out.println(dizi[i]);
}
//CONSOLE
1
5
7
-1
11
2


Simdi dizinin belekte nasil yer tutuguna bakalim


 * Yukaridaki sekilde 5 elemanli bir dizimiz var. eyer biz bu dizide herhandi bir index doldurmasak default olarak null veya SIFIR '0' olusturur. Yani Olusturdugunuz degiskenin default degerinin olusturur.
int dizi[] = new int[5];
dizi[0] = 47;
dizi[1] = 21;
dizi[2] = 27;

for(int i=0;i<5;i++){
      System.out.println(dizi[i]);
}
//CONSOLE
47
21
27
0
0


 * Simdi gelelim baska bir ayrintiya Bir dizimiz olsun 5 elemanli biz bu dizimize 6 elemani eklemeye calisirsak hata verir.

int dizi[] = new int[5];
dizi[0] = 47;
dizi[1] = 21;
dizi[2] = 27;
dizi[3] = 65;
dizi[4] = 72;
dizi[5] = 34;

for(int i=0;i<6;i++){
      System.out.println(dizi[i]);
}

//CONSOLE
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5

 * Ayni veri tipine ait bir cok elemani tutmasi diye bir tanim vardi gelin bir bunu ionceliyelim
        int dizi[] = new int[5]; 
        dizi[0] = 47;                   //Dogru kullanim
        dizi[1] = "Abdulakdir";   //Yanlis kullanim
        dizi[2] = 'A';                  //Dogru kullanim ama istenmiyen sonuc cunku ASCI karekterindeki //degeri alacak ve dizi 65 olmus olacak. 
        dizi[3] = true;                //Yanlis kullanim
        dizi[4] = 7.2;                //Yanlis kullanim
  

 * Yazimizin basinda demistik diziler ayni veri tipindeki elamanlarin toplulugudur. Biz diziyi int yaptiysak ancak sayilari verebiliyoruz yada diziyi string yaptiysak ancak karekter bilgilerini yazabiliyoruz.Peki butun degerleri yazablecegimiz bir diziyi nasil olusturacaz. Iste bu kisimda Javada SIKCA duyacaginiz Object  devreye giriryor yani dizimizi Objec tipinde olustururnca tum degerleri girebiliyoz bunu sebebi Object tum siniflarin atasi olmasi yani tum siniflar Object sinifindan turemistir.
Object dizi[] = new Object[5];
        dizi[0] = 47;
        dizi[1] = "Abdulakdir";
        dizi[2] = 'A';
        dizi[3] = true;
        dizi[4] = 7.2;
        for (int i = 0; i < dizi.length; i++) {
            System.out.println(dizi[i]);
        }

//CONSOLE
47
Abdulakdir
A
true
7.2


  *  Diziler aslinda java.util,Arrays sinifinin orneklenmis nesnelerdir.
  Simdi gelelim Arrays sinifini ile gelen ve isimize cok yariyacak olan methodlara
- sort : Bu method dizideki elemanlari duzgun siralam icin kullanilir.Dizinin tipine bagli olarak gerceklestirirlen bir siralama.
         System.out.println("----------------- NORMAL ---------------------------");
        int dizi[] ={33,2,31,1,13,47,200,21};
        for (int i = 0; i < dizi.length; i++) {
            System.out.println(dizi[i]);
        }
        System.out.println("----------------- SIRALI ---------------------------");
        Arrays.sort(dizi);
        for (int i = 0; i < dizi.length; i++) {
            System.out.println(dizi[i]);
        }

//CONSOLE
----------------- NORMAL ---------------------------
33
2
31
1
13
47
200
21
----------------- SIRALI ---------------------------
1
2
13
21
31
33
47
200


Bu methot asiri yuklenmis bir methot. Bu asirir yuklu methotlardanda biri
Arrays.sort(dizi,2,5)
Dizinin aralik olarak 2 index dahildir ama 5 index dahil degildir.

- binarySearch  : Bu method dizi icindeki bir elemanin var olup olmadigini ogrenmek icin kullanilir.. binarySearch methotunu kullanmak icin oncelikle diziyi siralanmis bir hale getirmek lazim yani sort methodu evelden kullanilmali.
Dizinin izinde istenilen deger yoksa negetif bir deger donderir varsa ise bulundugu index numarasini dondurur.
         int dizi[] ={33,2,31,-1,13,47,200,21};
        Arrays.sort(dizi);
        for (int i = 0; i < dizi.length; i++) {
            System.out.println(i+" . index "+ dizi[i]);
        }
        System.out.println("Sonuc "+Arrays.binarySearch(dizi,33) +" . index..");
        System.out.println("Sonuc "+Arrays.binarySearch(dizi,-1) +" . index..");
        System.out.println("Sonuc "+Arrays.binarySearch(dizi,-33) +" . index..");
        System.out.println("Sonuc "+Arrays.binarySearch(dizi,45) +" . index.."); 


//CONSOLE
0 . index -1
1 . index 2
2 . index 13
3 . index 21
4 . index 31
5 . index 33
6 . index 47
7 . index 200
Sonuc 5 . index..
Sonuc 0 . index..
Sonuc -1 . index..
Sonuc -7 . index..



- copyOf  : Bir dizinin kopyasini olusturur iki parametreye sahiptir birinci parametre kopyasi alinaca dizi ikincisi ise kopyasi alinacak dizinin kactanesini kopyalasin.
        int dizi[] ={33,2,31,-1,13,47,200,21};
        int diziCopy[] = Arrays.copyOf(dizi, dizi.length);
        for (int i = 0; i < diziCopy.length; i++) {
            System.out.println( diziCopy[i]);
        }



//CONSOLE
33
2
31
-1
13
47
200
21


 - copyOfRange  : Bu method bir dizinin kopyasini almak icin kullanilir.bu methotun 3 parametresi var birincisi kopyasi alinacak dizi ikincisi dizinin hangi satirindan itibaren kopyasi alinsin. Ucuncusu ise hangi satira kadar kopya alinsin.
        int dizi[] ={33,2,31,-1,13,47,200,21};
        int diziCopy[] = Arrays.copyOfRange(dizi,0, dizi.length);
        for (int i = 0; i < diziCopy.length; i++) {
            System.out.println( diziCopy[i]);
        }



//CONSOLE
33
2
31
-1
13
47
200
21


  - deepEquals : Bu methot object tipindeki iki object diziyi karsilastirmak icin kullanilir iki object dizi birbirinin aynisi ise true diyer durum ise false dondurur.
        Object dizi1[] = {33, 2, 31, -1, 13, 47, 200, 21};
        Object dizi2[] = {33, 2, 31, -1, 13, 47, 200, 21};
        Object dizi3[] = {33, 245, 31, -1, 13, 47, 200, 21};
        System.out.println(Arrays.deepEquals(dizi1, dizi2));
        System.out.println(Arrays.deepEquals(dizi1, dizi3));



//CONSOLE
true
false



 - fill : Bu method bir diziye ilk deger vermek icin yani diziye hicbir deger verilmemisse default olarak o degerin verilmesini saglar;
        int dizi[] = new int[4];
        Arrays.fill(dizi, -1);
        dizi[0] = 47;
        dizi[1] = 27;
        for (int i = 0; i < dizi.length; i++) {
            System.out.println( dizi[i]); 
        }


//CONSOLE
 47
27
-1
-1


 - asList : Bu diziyi List tipine cevirmek icin kullanilir.
        Integer dizi[] = {27,47,33,2};
        List list = Arrays.asList(dizi);
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }


//CONSOLE
 27
47
33
2


 - equals :  Iki diziyi kontrol eder birbirini aynisi ise true farkli sie false dondurur.
 - hashCode : Bir dizinin code olarak gelen numarasini int tipinde yollar yani su sekilde diyelimki iki dizimiz olsun birinci diziyi Arrays.hashCode(dizi1) ile code degerini aliyoruz ve ikinci dizininde ayni sekilde Arrays.hashCode(dizi2) aliyoruz. Bunlarini donen code ayni ise diziler ayni dizi farlkli ise diziler farkli diziler.
        int dizi1[] = {27,47,33,2};
        int dizi2[] = {27,47,33,2};
        System.out.println(Arrays.hashCode(dizi1));
        System.out.println(Arrays.hashCode(dizi2));



//CONSOLE
1774070
1774070


ikiside ayni code donderdigi icin ayni oldugu anlasiliyor. Aslinda tum karsilastirma islemleri arka planda bu olayi kullaniyor.

 - toString : Dizinin String tipindeki degerini dondurur.


 - System.arraycopy : Bir diziyi digerine kopyalamak ici kullanilir. Bu methotun 5 tane parametresi var
  1. Kopyalanacak dizi
  2. Kopyasi alinacak dizi nereden basliyarak kopyasi alinsin.
  3. Kopyasi alinacak dizi
  4. Basladigi yerden ilk nereden kopyalamaya baslasin
  5. Kopyasi alinacak dizi nereye kadar kopyasi alinsin
Multi Array (Cok Boyutlu Diziler)

Çok boyutlu dizi, dizilerden olusan bir dizi demektir. Her elemani baska bir dizi olan dizi.Yani öyle bir dizi tanimlayacagiz ki elemanlari baska diziler olsun.
         String dizi[][] = new String[4][3];
        dizi[0][0]="1";
        dizi[0][1]="Abdulkadir";
        dizi[0][2]="Selcukoglu";
        dizi[1][0]="2";
        dizi[1][1]="Ertugrul";
        dizi[1][2]="Aslan";
        dizi[2][0]="3";
        dizi[2][1]="Nazim";
        dizi[2][2]="Memedov";
        dizi[3][0]="4";
        dizi[3][1]="Rasim";
        dizi[3][2]="Imanov";

        for (int i = 0; i < dizi.length; i++) {
            String[] strings = dizi[i];
            for (int j = 0; j < strings.length; j++) {
                String string = strings[j];
                System.out.print(string +" - ");
            }
            System.out.println();
        }
//CONSOLE
1 - Abdulkadir - Selcukoglu -
2 - Ertugrul - Aslan -
3 - Nazim - Memedov -
4 - Rasim - Imanov - 







No comments:

Post a Comment