Pure Java – 69 Generics & Collections – ArrayList – 01

Merhaba Arkadaslar,
Onceki bolumlerde Collection API hakkinda on bilgiler verdik. Bu bolumde elimizi koda bulayacagiz. Ilk olarak java.util.ArrayList sinifini kod ornekleri ile anlamaya calisacagiz. Bu yazida Java Generics konusuna da deginecegiz fakat asil Generics konusunu ilerleyen bolumlerde isleyecegiz.

java.util.ArrayList sinifi java.util.List arabirimini uygulamaktadir. ArrayList’ler dinamik olarak buyuyebilirler ve eleman ekleme(insert) ve arama(search) islemlerinde array/dizilere gore cok daha verimlidir.

java.util.ArrayList sinifinin tanimlanmasina baktigimizda ;

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{...}

Ilerleyen yazilarda buradaki E’nin ne anlama geldiginden bahsedecegiz. Simdi en basit orneklerle baslayalim ;

import java.util.ArrayList;

class Test {
}

public class HelloArrayList {

	public static void main(String[] args) {
		ArrayList myArrayList = new ArrayList();
		// ArrayList'e elemani add metodu ile ekleyebiliriz.
		myArrayList.add(10);
		myArrayList.add(20);
		myArrayList.add("test");
		myArrayList.set(2, "new set text");
		//set metodu ile ilgili indexteki elemani override edebiliriz.
		myArrayList.add(true);
		myArrayList.add(new Test());
		// overloaded add metodunu kullanarak ilgili indexe eleman
		// ekleyebiliriz.
		myArrayList.add(1, '#');

		for (int i = 0; i < myArrayList.size(); i++) {
			System.out.println(myArrayList.get(i));
		}
	}
}

Hatirlayacagimiz gibi diziler ayni tipte elemanlar alabiliyordu. ArrayList’e dikkat edecek olursak int, String, boolean , char hatta kendi olusturdugumuz Test sinifi tipinde de elemanlar almaktadir. ArrayList’e diledigimiz elemanlari ekleyebiliriz.

ArrayList’e eleman eklemek icin overloaded add metodunu kullaniriz. Index degerini arguman olarak verdigimiz add metodunu kullanarak diledigimiz index degerine ekleme yapabiliriz. get metodunu kullanarak index degerini vererek elemanlara ulasabiliriz. set metodu ile de ilgili indexteki elemani override edebiliriz.
Bir ornek daha yazalim ve size ,isEmpty  , contains  , indexOf , remove ve clear metotlarini inceleyelim.

import java.util.ArrayList;
import java.util.List;

public class ArrayListMethodsTest {

	public static void main(String[] args) {
		List myArrayList = new ArrayList();

		boolean isEmpty = myArrayList.isEmpty();
		int size = myArrayList.size();

		System.out.println("isEmpty:" + isEmpty);
		System.out.println("size:" + size);

		myArrayList.add(20);
		myArrayList.add(20);
		myArrayList.add("10");

		// eleman ekledikten sonra tekrar test edelim.
		isEmpty = myArrayList.isEmpty();
		size = myArrayList.size();

		System.out.println("isEmpty:" + isEmpty);
		System.out.println("size:" + size);

		boolean contains = myArrayList.contains(20);
		boolean contains2 = myArrayList.contains("10");

		System.out.println("contains:" + contains);
		System.out.println("contains:" + contains2);

		// eger yoksa -1 doner
		int indexOf = myArrayList.indexOf(50);

		// eger 1den fazla varsa ilk index degeri doner.
		int indexOf2 = myArrayList.indexOf(20);

		System.out.println("indexOf:" + indexOf);
		System.out.println("indexOf:" + indexOf2);

		// elemanlari yazdiralim.
		for (Object o : myArrayList) {
			System.out.print(o + " ");
		}
		System.out.println();

		// elemani silelim.
		myArrayList.remove(0);

		// elemanlari yazdiralim.
		for (Object o : myArrayList) {
			System.out.print(o + " ");
		}

		// clear metodu tum elemanlari siler/temizler.
		myArrayList.clear();
		size = myArrayList.size();

		System.out.println("\nsize:" + size);

	}
}

Bir baska ornek olarak addAll , removeAll ve subList metotlarini da inceleyelim ;

import java.util.ArrayList;
import java.util.List;

public class MoreArrayListMethodstest {

	public static void main(String[] args) {
		ArrayList myArrayList = new ArrayList();
		myArrayList.add(10);
		myArrayList.add(20);
		myArrayList.add(30);
		myArrayList.add(40);

		ArrayList myArrayList2 = new ArrayList();
		myArrayList2.add(5);
		// addAll metodu ile tum collection icerigini ekleyebiliriz.
		myArrayList2.addAll(myArrayList);

		for (Object o : myArrayList) {
			System.out.print(o + " ");
		}

		System.out.println();
		for (Object o : myArrayList2) {
			System.out.print(o + " ");
		}

		List mySubList = myArrayList.subList(2, 4);

		System.out.println();
		for (Object o : mySubList) {
			System.out.print(o + " ");
		}

		myArrayList2.removeAll(myArrayList);
		// removeAll metodu ile ekledigimiz collectioni cikartabiliriz.
		System.out.println();
		for (Object o : myArrayList2) {
			System.out.print(o + " ");
		}
		
		myArrayList.removeAll(myArrayList);
		System.out.println();
		for (Object o : myArrayList) {
			System.out.print(o + " ");
		}

	}
}

Genelde ArrayList’lerde yukaridaki orneklerde oldugu gibi farkli farkli turlerde elemanlar olmaz bunun yerine array/dizilerde oldugu gibi ayni tipten elemanlar olmasi istenir. Java 1.5 ile Generics yapisi eklendi. Generics yapisi ile Collectionlara eklenebilecek elemanlari kisitlayabiliriz.

import java.util.ArrayList;
public class GenericArrayListTest {

	public static void main(String[] args) {
		ArrayList <String> stringArrayList = new ArrayList <String>();
		stringArrayList.add("test");
		stringArrayList.add("test2");
		//  Generic ifadesi kullanildigi icin sadece String
		// ekleyebiliriz.

		// stringArrayList.add(10); //derleme hatasi verir 
                // Generic <String> yapisi sadece
		// String elemanlara izin vermektedir.

	}
}

  • Collection tanimlamalari/declaration genelde Coding to an interface kuralina uygun sekilde yapilir.
  • Generic yapisinda < > primitive tipler kullanamayiz.Sadece reference type kullanabiliriz.
  • Collectionlar’in elemanlari objedir , primitive elemanlar tutmazlar. Ornegin int tipindeki elemanlar icin autoboxing uygulanir.
import java.util.ArrayList;
import java.util.List;

public class CodingToAnInterfaceTest {

	public static void main(String[] args) {

		List <Integer> myList = new ArrayList <Integer>();
		// referenca degiskenin tipi List, arabirim.
		// objemizin tipi ArrayList. Coding to an interface yapisina uygun.
		// #madde1

		// List myList = new ArrayList(); // int kullanamayiz !
		// #madde2

		List beforeJava5 = new ArrayList();
		beforeJava5.add(new Integer(1989));
		// Java5 ten once autoboxing olmadigi icin , kendimiz boxing yapmamiz
		// gereklidir.

		List <Integer> afterJava5 = new ArrayList <Integer>();
		afterJava5.add(1989);
		// Java5ten sonra autoboxing islemi yapilir.
		// Her iki durumda da elemanlar primitive degil!
		// #madde 3
	}
}

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *