Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

* Aynı veri türüne veya sınıfa ait birbirleri ile ilişkili veriler topluluğu. * Dizinin elemanları basit veri türüne ait veya nesneye ait olabilir. Bu.

Benzer bir sunumlar


... konulu sunumlar: "* Aynı veri türüne veya sınıfa ait birbirleri ile ilişkili veriler topluluğu. * Dizinin elemanları basit veri türüne ait veya nesneye ait olabilir. Bu."— Sunum transkripti:

1

2 * Aynı veri türüne veya sınıfa ait birbirleri ile ilişkili veriler topluluğu. * Dizinin elemanları basit veri türüne ait veya nesneye ait olabilir. Bu duruma göre hafızada uygun yer ayrılır. * veri_türü [ ] dizi_adı = new veri_türü [dizi_uzunluğu] ; * int [] a = new int[10];

3 * Dizilerde indisler 0’dan başlar. * String de olduğu gibi, uzunluğu 5 olan bir dizinin ilk elemanının indisi (bulunduğu pozisyon) 0, son elemanının indisi 4 olur. * Örn. 7 günlük sıcaklık derecelerini tutmak istersek: * int gun1, gun2, gun3, gun4, gun5, gun6, gun7; * int [ ] sicaklik = new int [7]; * 7 adet int tipinde değişken tanımlamaya eşdeğerdir: * sicaklik[0], sicaklik[1], sicaklik[2], sicaklik[3], sicaklik[4], sicaklik[5], sicaklik[6]

4 * Dizi tanımlandıktan sonra her bir elemanına değer atanabilir: * sicaklik[0] = 7; * sicaklik[1] =4; * sicaklik[2] =-1; * sicaklik[3] =-3; * sicaklik[4] =0; * sicaklik[5] =2; * sicaklik[6] =3;

5 * Kullanıcının bir aylık sıcaklık değerini klavyeden gireceği ve bu değerlerin ortalamasını, en düşük ve en yüksek sıcaklığı bulan bir kod yazın:

6 import java.util.*; public class ortalamaSicaklik { public static void main(String [] args) {Scanner klavye = new Scanner(System.in); double [] sicaklik = new double [30]; int indis, gun1, gun2; double toplam,ortalama, enDusuk, enYuksek; toplam = 0.0; for (indis=0; indis <= 29; indis++) { System.out.print (“Gun: “ + (indis+1) + “ sicaklik: “); sicaklik[indis] = klavye.nextDouble(); toplam += sicaklik[indis]; } ortalama = toplam / 30.0; System.out.println (“Kasim ayi ortalamasi = “ + ortalama); enDusuk = sicaklik[0]; gun1 = 0; enYuksek = sicaklik[0]; gun2 = 0; for (indis=1; indis <=29; indis++) { if (enDusuk > sicaklik[indis]) { enDusuk = sicaklik[indis]; gun1 = indis; } if (enBuyuk < sicaklik[indis]) { enBuyuk = sicaklik[indis]; gun2 = indis; } } System.out.println (“En dusuk sicaklik = “ + enDusuk + “ Gun = “ + (gun1+1)); System.out.println (“En yuksek sicaklik = “ + enYuksek + “ Gun = “ + (gun2+1)); } }

7 * double [] sinavNotu = new double [50]; Dizi elemanlarının veri türü Dizinin adı Dizide kaç eleman var * double [] sinavNotu; sinavNotu = new double[50]; * sinavNotu[3] = 78.3; * Dizinin dördüncü elemanı (3 numaralı indis) = 78.3

8 * Length ile dizinin büyüklüğünü (eleman sayısını) bulabiliriz. * sinavNotu.length dizinin büyüklüğünü verir * double[] sinavNotu = new double[50]; System.out.println (“Dizinin uzunlugu: “ + sinavNotu.length ); * Dizinin uzunluğu atama yoluyla değiştirilemez: * sinavNotu.length = 100;// Yazılamaz, hatalı * Dizinin boyutlarının dışına çıkmamaya dikkat edilmeli! * sınavNotu[50] = 65.1;//Max indis aşıldı * Derleyici hatası olmaz ama program çalışması sırasında Array index out of bounds mesajı alınır (çalışma zamanı hatası) * Yukarıdaki sınavNotu dizisinin tanımına göre en son elemanın indisi 49 olur. (0 ile 49 arasında olacak. Toplam 50 eleman.)

9 * Diziler yaratıldığı sırada ilk değerlerini alabilirler: * int [] sicaklik = {17,16,14,15,18,17,16}; * Dizinin 7 elemanlı bir dizi olduğunu anlıyoruz. * * Veya dizi tanımlandıktan sonra tek tek değer ataması yapılabilir: * int [] sicaklik = new int [7]; * sicaklik[0]=17; sicaklik[1]=16; …; sicaklik[6]=16;

10 * int veri tipindeki diziler eğer ilk değer almazlarsa otomatik olarak 0’a atanırlar. Fakat programın daha anlaşılır olması için, daha sonra değiştirilmek üzere bütün değerler bir döngü kullanarak 0’a da atanabilir. * Kod: int [] sicaklik = new int[365]; int i; for (i=0; i < sicaklik.length; i++) sicaklik[i] = 0;

11 * Bir dizi yapın ve bu diziyi başka bir diziye kopyalayın: … int dizi1 = { 7, 4, 8, 1, 4, 1, 4}; float dizi2 = new float[dizi1.length]; //diziyi yazdir … //dizi1’i dizi2’ye kopyala for(i=0; i< dizi1.length; i++) dizi2[i] = (float) dizi1[i]; //dizi2 yazdir … Örnek 2) Math.random() metodunu kullanarak 500 elemanlı int veri türünde bir dizi yapıp bu dizinin ortalaması, min ve max umunu ekrana basacak programı kodlayınız.

12 * Bir sınıf içinde bir değişken tanımlanabildiği gibi bir dizi de tanımlanabilir. (gerçekleştirme değişkeni) * Dizilerin tamamı metotlara gönderilebilirler – parametre olarak-, bu durumda bir nesne olarak gönderildikleri için referans ile çağırma tekniğiyle gönderilmiş olurlar. * Eğer dizinin bir elemanı metoda gönderilirse ve dizi elemanlarının veri tipi basit ise değer ile çağırma tekniği uygulanır, eğer dizi elemanları nesne ise referans ile çağırma tekniği uygulanır.

13 * Elemanları Ogrenci adında bir sınıf tipinde olan kayit adında bir dizi oluşturun: Ogrenci [] kayit; kayit[i] = new Ogrenci(); // kayit dizisinin her bir elemani Ogrenci sinifinin bir nesnesi

14 * Dizinin bir elemanı metoda parametre olarak yollanabilir. * ortalama = ortalamaBul (birinciDeger, sicaklik[i]); * Bu örnekte sicaklik ve birinciDeger parametrelerinin ortalamaları ortalamaBul metoduyla hesaplanmaktadır. Bu durumda sicaklik[i] metot tanımındaki veri tipinde sıradan bir değişken olarak metoda gönderilmiştir. * Eğer metoda gönderilen dizinin veri tipi basit veri tipiyse, metot bu indisli dizi elemanın değerini değiştiremez. Eğer, veri tipi bir nesne ise, referans ile çağırma vasıtasıyla bu indisli elemanın değeri değişebilir.

15 * Bir diziyi metoda gönderirken köşeli parantezler kullanılmaz. Gönderilen dizi bir nesne olarak gönderilmiş olur. double [] sicaklik = new double[30]; ortalama = ortalamaBul (sicaklik); * Bu durumda ortalamaBul metodu bir diziyi argüman olarak almaktadır ve bir double değeri alan ortalama geri vermektedir. * ortalamaBul değerinin tanımı ise aşağıdaki şekilde olabilir. public double ortalamaBul (double[] deger) { int i, toplam = 0; for (i = 0; i < deger.length; i++ ) toplam = toplam + deger[i]; return (toplam/deger.length); }

16 * Diziler de birer nesne gibi düşünüldüğü için diziler için atama “=” ve eşitlik “==” kavramları dizilerde de geçerli değildir. * İki dizi için “=” ifadesi kullanıldığında bu iki dizinin referansı (bellekteki gösterimleri eşitlenmiş olur, dolayısıyla iki dizi de aynı diziyi gösteriyor olurlar.) * Aynı şekilde “==” gösterimi ancak iki dizi aynı referansa sahip olduğunda doğru olmaktadır. Bunun yerine nesnelerde olduğu gibi bir equals metodu tanımlamak gerekmektedir.

17 int [] a = new int[3]; int [] b = new int[3]; int i; for (i = 0; i < a.length; i++ ) a[i] = i; for (i = 0; i < a.length; i++ ) b[i] = i; if (b==a) System.out.println (“== kullanarak esittirler.”); else System.out.println (“== kullanarak esit degildirler.”); * == kullanarak esit degildirler

18 public class TestEsitlik { public static void main(String[] args) { int[] a = new int[3]; int[] b = new int[3]; int i; for (i = 0; i < a.length; i++) a[i] = i; for (i = 0; i < b.length; i++) b[i] = i; if (b == a) System.out.println("== ile esit."); else System.out.println("== ile esit degil."); if (esit(b,a)) System.out.println(“Esit metodu ile esit."); else System.out.println(" Esit metodu ile esit degil."); } public static boolean esit(int[] a, int[] b) { boolean denkmi; if (a.length != b.length) denkmi = false; else { denkmi = true; //gecici olarak true degeri ata int i = 0; while (denkmi && (i < a.length)) { if (a[i] != b[i]) denkmi = false; i++; } } return denkmi; } } == ile esit degil Esit metodu ile esit Static bir metod icinden (main) static bir baska metodu (esit) cagirdigimiz icin, ve her ikisi de ayni sinif icinde tanimli oldugu icin sadece adini kullanmamiz yeterli. Nesne olusturup onun uzerinden cagirmamiza gerek yok.

19 * public int faktoriyel(int sayi) * Javada metotlar bir nesne döndürebilirler. Diziler de birer nesne olarak kabul edildikleri için metotlarda dizi döndürmek mümkündür. Bu tip bir metot aşağıdaki gibi tasarlanır. * public veri_tipi[] metot_ismi (parametre listesi) * Metodun ulaşılabilirliği public ya da private olabilir. Ayrıca metot static olarak da tanımlanabilir.

20 public static char [] sesliHarfler () { char[] yeniDizi = new char[8]; yeniDizi [0] = ‘a’; yeniDizi [1] = ‘e’; yeniDizi [2] = ‘ı’; yeniDizi [3] = ‘i’; yeniDizi [4] = ‘o’; yeniDizi [5] = ‘ö’; yeniDizi [6] = ‘u’; yeniDizi [7] = ‘ü’; return yeniDizi; }

21 * Değerleri küçükten büyüğe veya tersi şekilde sıralamak için. * Kabarcık sıralama (Bubble Sort) (n sayıyı küçükten büyüğe sıraya dizmek için bir algoritma) * Algoritma için iç içe iki döngü ve bir yineleme sayacı kullanılır. Bu yineleme sayacının bir turunda, dizideki kalan en büyük sayı dizinin sonuna gider. Buna göre ilk yinelemede dizinin en büyük sayısı en sona gider. Bundan sonra artık en son sayıyı denetlemeye gerek yoktur. İkinci yinelemede en büyük ikinci sayısı sondan bir önceki yere gider. Bu şekilde n- 1 yinelemede n sayı sıraya dizilmiş olur. Her yinelemede ise denetlenmesi gereken sayı adedi 1 azalır.

22 * Değerleri küçükten büyüğe veya tersi şekilde sıralamak için. * Kabarcık sıralama (Bubble Sort) (n sayıyı küçükten büyüğe sıraya dizmek için bir algoritma) * Algoritma için iç içe iki döngü ve bir yineleme sayacı kullanılır. Bu yineleme sayacının bir turunda, dizideki kalan en büyük sayı dizinin sonuna gider. Buna göre ilk yinelemede dizinin en büyük sayısı en sona gider. Bundan sonra artık en son sayıyı denetlemeye gerek yoktur. İkinci yinelemede en büyük ikinci sayısı sondan bir önceki yere gider. Bu şekilde n-1 yinelemede n sayı sıraya dizilmiş olur. Her yinelemede ise denetlenmesi gereken sayı adedi 1 azalır.

23 public class kabarcikSiralama { final static int maksEleman = 2000; public static void main(String[]args) { int n; Scanner klavye = new Scanner(System.in); int[] liste = new int[maksEleman]; //listeyi yarat System.out.print("Liste boyunu giriniz:"); n = klavye.nextInt(); for(int i=0; i<n; i++) liste[i] = (int)Math.round(Math.random()*5)+1; liste = kabarcik(liste,n); System.out.println("Sirali Liste:"); for(int i=0; i<n; i++) System.out.println(liste[i]); } //------------------------------------------ public static int[] kabarcik(int[] x, int boy) { int gecici; for(int k=1; k<boy; k++) for(int i=0; i<boy-k; i++) if(x[i]>x[i+1]) { gecici = x[i]; x[i] = x[i+1]; x[i+1] = gecici; } return x; }} Static bir metod icinden (main) static bir baska metodu (kabarcik) cagirdigimiz icin, ve her ikisi de ayni sinif icinde tanimli oldugu icin sadece adini kullanmamiz yeterli. Nesne olusturup onun uzerinden cagirmamiza gerek yok.

24 Bir dizinin eleman tipi nesne olabilir. public class Kisi { private String isim; private String ePosta; private String dogumYeri; private double gpa; //---------------------------------------------------- public Kisi(String a, String b, String c, double o) { isim=a;ePosta=b;dogumYeri=c;gpa=o; } //---------------------------------------------------- public Kisi() { } //---------------------------------------------------- public void setIsim(String adSoyad) { isim=adSoyad; } … } Kisi [] ogrenci = new Kisi [maksMevcut]; ogrenci[i] = new Kisi(); //nesne kurucu ogrenci[i].setIsim(“Ali Veli”);

25 * Matris veya çok boyutlu veri gösterimi için kullanılırlar. * 2 Boyutlu bir dizi: * veri_turu [] [] matris = new veri_turu [4] [4]; * Bir elemana ulaşmak için yerini 2 indisi de kullanarak tespit etmek lazım. * matris[1][1] = 70; * matris[0] [0]= 80; * matris[1][0]=67; * matris[2][3]=36; 80655570 67705590 45807336 25168196

26 * Çok boyutlu diziler aslında her boyut içinde yer alan birer boyutlu dizilerin bileşkesidir. Tüm dizinin uzunluğu (büyüklüğü) her boyuttaki dizilerin uzunluğunun çarpımına eşittir. * Örnek: * int [][] tablo = new int [10][20]; * tablo[3][5] = 23; * System.out.println (“Tablo cok boyutlu dizisinin uzunlugu: “ + tablo.length);  10

27 * Ayrıca her boyuttaki dizilere de ayrı ayrı erişebiliriz, bunları da birer boyutlu diziler olarak kullanabiliriz. * Örnek: int [][] tablo = new int [3][10] yazmak yerine int [][] tablo; tablo = new int [3][]; tablo[0] = new int [10]; tablo[1] = new int [10]; tablo[2] = new int [10]; * yazılabilir ve bu iki ifade de birbirine denktir. Bu şekilde çok boyutlu diziyi oluşturan tek boyutlu dizilerin uzunluklarını da ayrı ayrı kullanmak mümkün olabilir. Buna göre * tablo[0].length ifadesi 0. indisteki dizinin uzunluğunu gösterir.

28 int [][] matris = new int [4][4]; for (sira = 0; sira <4; sira++ ) for (sutun = 0; sutun <4; sutun++ ) matris [sira][sutun] = (int) (Math.random()*5) + 1; for (sira = 0; sira <4; sira++ ) { for (sutun = 0; sutun <4; sutun++ ) System.out.print (matris[sira][sutun] + “ “); System.out.println (); } Çıktı: 7 4 5 3 6 5 4 1 2 4 5 8 9 6 5 3

29 * Static olarak tanımlanan bir değişken veya metot, nesnenin türüne ve durumuna bağlı olmaksızın kullanılabilen bir yapıdadır. Bu durumda sınıf ismi nesne yerine kullanılır. Ayrıca bir nesne oluşturulmaz. Math.sqrt(25); Sınıf ismiMetot ismi

30 * Static olarak tanımlanan bir metot veya değişkenin değeri ya da kullanımı herhangi bir nesnenin durumundan bağımsız olmalıdır. * Math.min(a,b) : Hangi nesne tarafından çağrılırsa çağrılsın verilen iki sayının küçüğünü hesaplar. * Static olarak tanımlanabilir.

31 * Yalnızca sınıf değişkenleri ve metotlar static olabilir; static sınıf olmaz. * Static nesne ve metotları çağırırken: Sınıfadı.metotadı(); Sınıfadı.değişkenadı; * Static olmayan nesne ve metotları çağırırken: Nesneadı.metotadı(); Nesneadı.değişkenadı;

32 * Static olduğu halde nesneadı.metotadı() veya nesneadı.değişkenadı şeklinde çağrılması halinde derleyici hata vermez. * Ancak static metot ve değişkenler, kaç tane nesne yaratılmış olursa olsun sadece tek bir adet değere ve referansa sahiptir. * Static metot ve değişkenler this kullanılarak çağrılamaz  Derleyici Hatası

33 public class StatikOrnek { public static int staticA;// statik degisken public int a;//statik olmayan degisken public static void setStaticA(int deger) { staticA = deger; } public void setA( int deger) { a = deger; } public int getStaticA() { return staticA; } public int getA() { return a; } }

34 public class DeneStatikOrnek { public static void main(String [] args) { StatikOrnek s1 = new StatikOrnek(); StatikOrnek s2 = new StatikOrnek(); s1.setStaticA(5); s1.setA(10); s2.setStaticA(15); s2.setA(20); System.out.print(“s1 nesnesinin staticA degeri: ”); System.out.println(s1.getStaticA()); System.out.print(“s1 nesnesinin A degeri: ”); System.out.println(s1.getA()); System.out.print(“s2 nesnesinin staticA degeri: ”); System.out.println(s2.getStaticA()); System.out.print(“s2 nesnesinin A degeri: ”); System.out.println(s2.getA()); }} s1 nesnesinin staticA degeri: 15 s1 nesnesinin A degeri: 10 s2 nesnesinin staticA degeri: 15 s2 nesnesinin A degeri: 20

35 * C M,N için bir sınıf yazınız. * Sınıfın metotları * K! * verileriAl (ve hesapla) * M, N parametrelerini main’den girerek CM,N ’i hesapla.

36 public class kombinasyon { public static int verileriAl(int M, int N) { int c; c=nFaktoriyel(M) / (nFaktoriyel(N) * nFaktoriyel(M-N)); // c=this.nFaktoriyel(M) / (nFaktoriyel(N) * nFaktoriyel(M-N)); // derleyici yukaridaki satir icin hata verir return c; } public static int nFaktoriyel(int K) { int nFakt; nFakt=1; for(int i=1; i<=K; i++) nFakt*=i; return nFakt; }

37 Import java.util.*; public class KombinasyonDeneme { public static void main(String[]args) { int M,N,sonuc,gecici; Scanner klavye = new Scanner(System.in); System.out.println("M ve N sayılarını giriniz (M>N):"); M=klavye.nextInt(); N=klavye.nextInt(); if(M<=N) { gecici=M; M=N; N=gecici; } sonuc=kombinasyon.verileriAl(M,N); System.out.println("c="+sonuc); }

38 * 1!+2!+3!+…+N! * Static metot kullanarak * Nesne kullanarak

39 //static metot kullanarak yazilmis hali public class deneFaktoriyelToplami { public static void main(String[]args) { long n, toplam=0; System.out.print("Bir tamsayi giriniz (n>2):"); Scanner klavye = new Scanner(System.in); n = klavye.nextInt(); for(long k=1; k<=n; k++) toplam = toplam + faktoriyel(k); System.out.println("1!+2!+...+"+n+"!="+toplam); } public static long faktoriyel(long sayi) { long f=1; for(int k=1; k<=sayi;k++) f=f*k; return f; }

40 //nesne kullanilarak yazilmis hali public class deneFaktoriyelToplami { public static void main(String[]args) { long n, toplam=0; faktoriyelToplami eleman = new faktoriyelToplami (); System.out.print("Bir tamsayi giriniz (n>2):"); Scanner klavye = new Scanner(System.in); n = klavye.nextInt(); for(long k=1; k<=n; k++) toplam = toplam + eleman.faktoriyel(k); System.out.println("1!+2!+...+"+n+"!="+toplam); } public class faktoriyelToplami { public long faktoriyel(long sayi) { long f=1; for(int k=1; k<=sayi;k++) f=f*k; return f; } Bir static metot içinde static olmayan bir metot çağrılabilmesi için, static olmayan metoda ait bir nesne yaratılıp bu nesneyle beraber kullanılması gerekir. static metot static olmayan metot

41 import java.util.*; public class DaireHesabi {public static final double PI=3.1415; private double daireCapi; public void setDaireCapi(double Cap) { daireCapi = Cap; } public static double alan(double yaricap) { return (PI* yaricap * yaricap); } public void alanGoster() {System.out.println(“Dairenin alani “+ alan(daireCapi/2)); } public static void alanBulma() {System.out.println(“Dairenin capini giriniz:”); Scanner klavye = new Scanner(System.in); double cap1 = klavye.nextDouble(); DaireHesabi daire1 = new DaireHesabi(); daire1.setDaireCapi(cap1); daire1.alanGoster(); } public class DeneDaireHesabi {public static void main(String [] args ) {DaireHesabi daire1 = new DaireHesabi(); daire1.setDaireCapi(2); daire1.alanGoster(); DaireHesabi.alanBulma(); } } Bir static metot içinde static olmayan bir metot çağrılabilmesi için, static olmayan metoda ait bir nesne yaratılıp bu nesneyle beraber kullanılması gerekir.

42

43 * Collection (Koleksiyon): objeleri çeşitli algoritma yapılarını uygulayarak saklayan yapılardır. Java Collections Framework ile yüksek performanslı algoritma işlemleri yapılabilir Interfaces Collection yapıları çeşitli arayüzler(interface) üzerine kurulmuştur. Genel yapı altta belirtilmiştir

44 * Collection Interface * Collection arayüzünün özellikleri şunlardır * int size() : Collection içerisinde bulunan elemanların sayısını verir * boolean isEmpty() : Collection içerisinde eleman yoksa true değerini dönderir * boolean contains(Object element) : Parametre olarak verilen eleman Collection içerisinde mevcutsa true değerini dönderir * boolean add(Object element) : Collection yapısına object ekler. Collection ı implemente eden sınıflar bu metodu implemente etmek zorunda değildir * boolean remove(Object element): Collection yapısından object remove eder. Collection ı implemente eden sınıflar bu metodu implemente etmek zorunda değildir * Iterator iterator() : Collection yapısında objeleri get etmeye, remove etmeye yada obje listesi üzerinde dolaşmaya yarar * boolean containsAll(Collections c) : Bulk bir işlemdir. Verilen obje listesinin collection içerisinde var olup olmadığını kontrol eder * boolean addAll(Collections c) : Parametre olarak verilen listeyi toplu olarak collection içerisine ekler. * boolean removeAll(Collections c) : Parametre olarak verilen liste içerisindeki elemanları collection içerisinden remove eder. * boolean retainAll(Collections c) : Parametre olarak verilen liste ile collection içerisindeki elemanları aynı tutar. Yani parametre olarak verilen listede olmayan elemanlar collection içerisinde çıkartılır. * void clear() : Liste içerisindeki elemanları çıkartır * Object[] toArray() : List yapısı array yapısına dönüştürülür * T[] toArray(T[] a) : List yapısı array yapısına dönüştürülür ve list yapısının içeriğide değiştirilir.

45 * Iterator Interface Iterator arayüzü ile collection üzerinde dolaşarak, collection elemanalrını get edebiliriz. Aynı zamanda bu elemanları collection üzerinden remove edebiliriz. hasNext() : Eğer iterasyon sırasında dongude erişilmeyen eleman varsa true döner. next() : Dongude bir sonraki elemanı getirir remove() : Elemanı collection içerisinde çıkartır Alttaki örneği inceleyiniz ArrayList list = new ArrayList (); list.add("T1"); list.add("T2"); Iterator iter = list.iterator(); while(iter.hasNext()){ String deger = iter.next(); System.out.println(deger); } * Eğer bir collection içerisinde dongu ile dolaşıp remove işlemi yapıyorsak bu işlemi Iterator ile yapmamız gerekmektedir

46 * java.util.ArrayList sınıfı kendiliğinden büyüyebilen dizi (array) kurar ve temelde * Collections Vector sınıfı ile aynı sayılır. ArrayList sınıfının su özelikleri vardır: * Veri eklenip silindikçe ArrayList kendi uzunluğunu otomatik olarak ayarlar. * ArrayList listesine erisim islemi O(1), sokusturma (insertion) islemi O(n) ve silme islemi O(n) zaman karmasasına sahiptir. * ArrayList sokusturma, silme ve arama eylemlerini yapan metotlara sahiptir. * ArrayList üzerinde foreach döngüsü, iteratörler ve indexler yardımıyla gezinilebilir.

47 * Programcı, ne zaman ArrayList ve ne zaman array kullanması gerektiği konusunda ikileme düşebilir. Eğer, depoya konulacak öğe sayısı belirli ve o sayı sık sık değişmeyecekse array seçimi uygun olur. Ama öğe sayısı baştan bilinemiyor ya da o sayı sık sık değişiyorsa ArrayList doğru bir seçimdir. * Tabii, buna ek olarak şunu söylemeliyiz: ArrayList nesnelerin depolanması içindir. İlkel veri tipleri depolamak için array seçilmesi uygun olur. Bütün bunların ötesinde ArrayList sınıfı List arayüzünün metotlarını kullanma yeteneğine sahiptir; dolayısıyla array yapısına oranla programcıya daha çokkolaylık sağlar.

48 * void add(int index, Object element) * Listede indisi belirtilen yere öğe sokuşturur (insert). O indisten sonraki öğelerin konumları birer geriye kayar. * boolean add(Object o) * Parametrede verilen nesneyi listenin sonuna ekler. * boolean addAll(Collection c) * Parametrede verilen koleksiyonun bütün öğelerini listenin sonuna ekler. Ekleme sırası koleksiyonun iteratörü’nün belirlediği sıradadır. * boolean addAll(int index, Collection c) * Belirtilen index’ten başlayarak verilen koleksiyonu listeye yerleştirir.

49 * void clear() * Listedeki bütün öğeleri siler; boş liste haline getirir. * Object clone() * ArrayList kılgısının (instance) bir kopyasını yapar. * boolean contains(Object o) * Parametrede belirtilen nesne listede varsa true değerini alır. * void ensureCapacity(int minCapacity) * Gerekiyorsa ArrayList nesnesinin sığasını artırarak, parametrenin belirlediği minimum sığa kadar öğeyi depo edebilmesini sağlar. * Object get(int index) * İndeksi belirtilen öğeyi verir. * int indexOf(Object o) * Parametrede verilen nesnenin listedeki indeksini verir. Nesne listede yoksa -1 değerini verir. * boolean isEmpty() * Listenin boş olup olmadığını söyler. * int lastIndexOf(Object elem) * Belirtilen öğenin listedeki son indeksini söyler.

50 * Object remove(int index) * İndeksi verilen öğeyi listeden siler. * protected void removeRange(int fromIndex, int toIndex) * Belirtilen indeksler arasında kalan öğeleri listeden siler. * Object set(int index, Object element) * Verilen nesneyi istenen indisli öğenin yerine koyar. * int size() * Listedeki öğe sayısını verir. * Object[] toArray() * Listedeki öğeleri, aynı sırayla bir array haline getirir. * Object[] toArray(Object[] a) * Listedeki öğeleri, aynı sırayla bir array haline getirir; koşma anındaki tipi belirtilen tip olur. * void trimToSize() * ArrayList nesnesinin sığasını, listedeki öğe sayısına indirir; yani boş terimleri siler.

51

52 import java.util.*; public class Koleksiyon { public static void main(String[] args) { ArrayList a = new ArrayList (); a.add("Bir"); a.add(«İki"); a.add("Uc"); a.add("Dort"); a.add("Bes"); a.add("Altı"); System.out.println(" a ArrayListi = " + a); System.out.println(a.isEmpty()); System.out.println(a.contains("Altı")); a.remove(3); System.out.println(" a ArrayList = " + a); System.out.println(" a ArrayList = " + a.remove(1)); a.clear(); System.out.println(" a ArrayList = " + a); } /* Çıktı: a ArrayListi = [Bir, İki, Uc, Dort, Bes, Altı] false true a ArrayList = [Bir, İki, Uc, Bes, Altı] a ArrayList = İki a ArrayList = [] */

53 import java.util.*; public class Koleksiyon { public static void main(String[] args) { ArrayList a = new ArrayList (); a.add("Ciğdem"); a.add("Papatya"); a.add("Kardelen"); a.add("Lale"); a.add("Sumbul"); a.add("Gul"); System.out.println(" a ArrayListi = " + a); a.add(3, "Diken"); System.out.println(" a ArrayListi = " + a); System.out.println(a.indexOf("Diken")); a.set(3, "Gelincik"); System.out.println(" a ArrayListi = " + a); System.out.println(a.lastIndexOf("Kamelya")); } /* Cıktı: a ArrayListi = [Ciğdem, Papatya, Kardelen, Lale, Sumbul, Gul] a ArrayListi = [Ciğdem, Papatya, Kardelen, Diken, Lale, Sumbul, Gul] 3 a ArrayListi = [Ciğdem, Papatya, Kardelen, Gelincik, Lale, Sumbul, Gul] */

54 /* * iterator() metodu kullanarak, ArrayList uzerinde gezinecek bir Iterator nesnesi yarat. */ Iterator itr = arrayList.iterator(); // hasNext() ve next() metotlarını kullanarak listeyi tara System.out.println("ArrayList oğelerini tarıyor..."); while (itr.hasNext()) System.out.println(itr.next());

55 * Set Interface Set arayüzü Collection arayüzünü extend etmiştir. Yani Collection arayüzünün metodlarını inherit eder. Set arayüzünü implemente eden tüm sınıfların ortak özelliği şudur ; tekrarlanan objeler set içerisine atılmaz.Aynı objeyi set içerisine atmak istediğimizde set bunu gözardı eder. Alttaki örneği inceleyelim ; Set set = new HashSet (); set.add("T1"); set.add("T2"); set.add("T1"); Iterator iter = set.iterator(); while(iter.hasNext()){ String deger = iter.next(); System.out.println(deger); } * Console a değerleri yazdırmak istediğimiz zaman yalnızda "T1" ve "T2" değerlerini yazdırır.

56 * List Interface List yapısı ile veriler sıralı bir şekilde index lenerek tutulur. Array yapılarına çok benzerler. Fakat boyutları dinamik olarak artar yada gerekli durumlarsa dinamik olarak azalır List yapısının genel özellikleri şöyledir Belirli pozisyonlardaki elemana erişilebilir * Boyutu compiler tarafından dinamik olarak artırılır yada azaltılır * Liste içerisindeki bir obje search edilebilir * List yapısı ile kullanabileceğimiz metodlar alttadır * E get(int index) : Parametre olarak verilen index deki elemanı getirir. * set(int index, E element) : Parametre olarak verilen index deki eleman ile parametre olarak verilen elemanı değiştirir * boolean add() : Listenin sonuna eleman ekler * boolean remove(int index) : Parametre olarak verilen index deki elemanı listeden remove eder. * boolean addAll(int index, Collection c) : Parametre olarak verilen index ten sonra paramtre olaran verilen listeyi ekler. * int indexOf(Object o) : Parametre olarak verilen objenin indexini bulur * List subList(int from, int to):

57 * Queue ve Stack yapısı * Queue ile kuyruk(queue) yapısını implemente edebiliriz. Bu yapı FIFO(First In First Out) mantığına göre çalışır. * add(Element e) : Kuyruğa yeni bir kayıt ekler * Element poll() : Kuyruktan FIFO algoritmasına göre bir eleman getirir ve remove eder * Element peek() : Kuyruktan FIFO algoritmasına göre bir eleman getirir fakat remove etmez * Alttaki örneği inceleyebilirsiniz * Queue myQ=new LinkedList (); * myQ.add(5); * myQ.add(6); * myQ.add(7); * myQ.poll(); * Stack ise LIFO(Last In First Out) mantığına göre çalışır. * add(Element e) : Kuyruğa yeni bir kayıt ekler * Element pop() : Kuyruktan LIFO algoritmasına göre bir eleman getirir ve remove eder * Element peek() : Kuyruktan LIFO algoritmasına göre bir eleman getirir fakat remove etmez * Alttaki örneği inceleyebilirsiniz * Stack stack=new Stack (); * stack.add(5); * stack.add(6); * stack.add(7); * stack.pop(); * PrioratyQueue da ise kuyruğa atılacak elemanların öncelik sırası önemlidir. Kuyruğa her eleman eklemeye çalıştığımızda öncelik sırasına göre sorting işlemi yapılır.

58 * Map Interface Map genel olarak (key,value) olarak object bilgilerini tutar. Aynı key birden fazla map içerisine atılamaz, fakat farklı key lerle map içersine aynı objeler atılabilir. Map interface inin genel metodları şu şekildedir V put(K key, V value) : Map içerisine key ve o key değerini gösteren value atılır * V get(Object key) : Parametre olarak verilen key karşılığındaki objeyi getirir * V remove(Object key) : Parametre olarak verilen key karşılığındaki objeyi getirir ve remove eder * boolean containsKey(Object key) : Parametre olarak verilen key, map içerisinde mevcut mu diye kontrol edilir. * boolean containsValue(Object value) : Parametre olarak verilen value, map içerisinde mevcut mu diye kontrol edilir. * int size() : Map in size ını kontrol eder * boolean isEmpty() : Map in boş olup olmadığını kontrol eder. * void putAll(Map m) : Mevcut bir map e parametre olarak verilen map i kontrol eder. * void clear() : Map içerisindeki verileri boşaltır. * Set keySet() : Map içerisindeki key değerlerini verir * Collection values() : Map içersindeki value değerleri bir collection a gelir

59 * Alttaki örneği inceleyelim : Map map = new HashMap (); * map.put(1, "Ali"); * map.put(2, "Ahmet"); * map.put(3, "Mehmet"); * map.put(4, "Veli"); * Set keySet = map.keySet(); * Iterator iter = keySet.iterator(); * while(iter.hasNext()){ * Integer inte = iter.next(); * System.out.println(map.get(inte)); * } * Bir diğer örnek : Map map = new HashMap (); map.put(1, "Ali"); map.put(2, "Ahmet"); map.put(3, "Mehmet"); map.put(4, "Veli"); Collection values = map.values(); for(String value : values){ System.out.println(value); }

60 * Implemantasyonalar ArrayList : * List interface ini implemente etmiştir. * Veriler index li bir şekilde saklanır. * Sıralı listelere hızlı erişim sağlanır * HashMap : * Map interface ini implemente etmiştir. * Key değerlerinden hash üretilerek objeler saklanır * HashSet : * Set arayüzünü implemente eder * Veriler sırasızdır * SortedMap : * Map arayüzünü implemente etmiştir * Map in key değeri sıralı olarak gelir * SortedSet : * Set arayüzünü implemente etmiştir * Artan sıraya göre dizilmiş nesneler kümesi. * LinkedList : * List arayüzünü imlemente etmiştir * Veriler sıralı olarak gösterilir, fakat birbirlerinin adreslerini tutar.


"* Aynı veri türüne veya sınıfa ait birbirleri ile ilişkili veriler topluluğu. * Dizinin elemanları basit veri türüne ait veya nesneye ait olabilir. Bu." indir ppt

Benzer bir sunumlar


Google Reklamları