En çok bilinen koleksiyon API arayüzü List arayüzüdür. Listeler verilerimizi belirli bir sıraya göre hafızada tutan kapsayıcı sınıflardır. Sizlere liste arayüzünün metodlarını teker teker açıklamak yerine kullanımına örnekler vererek konuyu hafızanıza yerleştirmek istiyorum. İlk olarak listeye eleman eklemeyi görelim :
List<String> al = new ArrayList<String>();
List<String> al2 = new ArrayList<String>();
al.add("ahmet");
al.add(0,"mehmet");
al.add(0,"ali");
al.add(0,"veli");
System.out.println(al);
System.out.println(al2);
al2.addAll(al);
System.out.println(al2);
Örneğimizde iki adet ArrayList kapsayıcı nesnesi oluşturup bunlara çeşitli metodlar vasıtasıyla eleman ekleyerek içeriklerini yazdırdık. İlk metodumuz add(), listemizin sonuna eleman eklemeye yarar. Yine add metodumuzun overloadu olarak listenin sonuna değil istediğimiz indeksine eleman eklemeye yarayan bir metodumuz var. Listemize bir diğer listeden çoklu eleman eklemek için ise addAll metodunu kullanıyoruz.
İkinci olarak listeden eleman silmeye bakalım :
al.remove("ali");
System.out.println("Liste 1 :" + al);
al2.remove(0);
System.out.println("Liste 2 :" + al2);
al2.removeAll(al);
System.out.println("Liste 2 :" + al2);
Listeden eleman silmek için remove() metodunu kullanıyoruz. remove() metodunun iki overload’u bulunuyor. Birincisi parametre olarak listeden silmek istediğimiz elemanın kendisini alırken, ikincisi elemanın listedeki yerini (indeks) alır. Toplu silme işlemi için removeAll() metodunu kullanabiliriz. Bu metod parametre olarak verilen liste içindeki elemanları silme yapılan listeden çıkarır. Yukarıdaki örnekte al2 listesinden al listesinde bulunan bütün elemanlar çıkarılmıştır. Bu işlem sonunda al listesinde al fark al2 kalmış olur. Az kullanılan ama yararlı bir metod olan retainAll() kullanımını örnekle görelim :
//retainAll() kullanımı
List<String> liste1 = new ArrayList<String>();
List<String> liste2 = new ArrayList<String>();
for(int i = 0; i <= 10; i++)
{
liste1.add(String.valueOf(i));
}
System.out.println("Liste 1 :" + liste1);
for(int i = 0; i <= 15; i++)
{
liste2.add(String.valueOf(i));
}
System.out.println("Liste 2 :" + liste2);
liste2.retainAll(liste1);
System.out.println("Liste 2 :" + liste2);
Burada liste1 10′a kadar olan sayılarla doldurulmuş, liste2 ise 15′e kadar olan sayılarla doldurulmuştur. liste2′ ye retainAll() komutu verilmiştir. Bu metod liste2 içerisinde olup da liste1‘de olmayan tüm elemanları liste2‘den siler. Yani liste2 içerisinde sadece liste2 ile liste1‘in kesişimi kalır. Örneğin çıktısı :
Liste 1 :[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Liste 2 :[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] Liste 2 :[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
şeklindedir.
Listenin herhangi bir yerindeki (indeks) elemana ulaşmak için get() metodunu kullanıyoruz. Listenin herhangi yerindeki (indeks) bir elemanı değiştirmek için ise set() metoduna başvuruyoruz. Bu metodların kullanımı görelim :
System.out.println(liste2.get(3));
liste2.set(3, "99");
System.out.println(liste2.get(3));
Bu örnekte liste2 listesinin 4. (listelerde indeksler 0′dan başlar ) elemanı ekrana yazdırılıyor. Daha sonra 4. eleman 99 olarak değiştirilip tekrar ekrana yazdırılıyor.
Temel operasyonları öğrendiğimize göre elimizdeki liste üzerinden tüm elemanlara teker teker ulaşmanın (iteration) yöntemlerine bakabiliriz. Bunun için çeşitli yöntemler mevcut. İlk olarak klasik for döngüsüyle erişimi görelim :
for (int i = 0; i < liste2.size(); i++) {
String string = liste2.get(i);
System.out.print(string);
}
Burada for döngümüzü listenin uzunluğu (size()) ile kısıtlayarak elemanlara tek tek erişiyoruz. Gelişmiş for döngüsü ile erişim ise şu şekilde:
for (String string : liste2) {
System.out.println(string);
}
Son olarak ise Iterator yardımı ile elemanlara erişim yöntemidir. Bunu da örnekle görelim :
ListIterator<String> li = liste2.listIterator();
while (li.hasNext()) {
String string = li.next();
System.out.print(string);
}
Burada Iterator kullanmanın avantajı listede ileri geri hareket edebiliyor olmamız. Ayrıca listede hareket ederken listeyi değiştirmemiz de mümkün. Bu üç yöntem içinde elemanlara ulaşma hızı olarak en hızlı olanı ilk gösterdiğimiz klasik for döngüsüdür. Diğer iki yöntem ise yaklaşık olarak birbirine eşit hızlarda çalışmaktadır. Örneğin 150000 elemanlı bir dizideki elemanlara tek tek erişmek klasik for döngüsü ile yaklaşık 3 milisaniye sürerken, geliştirilmiş for döngüsü ve Iterator yardımıyla erişmek ise yaklaşık 6 milisaniye sürer. Liste arayüzünün anlattıklarım dışında da birkaç metodu bulunuyor fakat bunlara değinmeyeceğim.
Java’da Liste arayüzünün iki ayrı gerçeklemesi vardır. bunlardan ilki yukarıda kullandığımız ArrayList’dir. İkincisi ise LinkedList. Bu iki gerçekleme de birbirlerine değişik konularda avantaj sağlarlar. Örneğin ArrayList rastgele erişim konusunda LinkedList’e göre çok avantajlı iken. LinkedList ise araya eleman sokmakta ArrayList’e göre çok üstündür. Bu farkları ufak kod parçaları yazarak deneyip görebilirsiniz.
İlgili Yazılar:
- Java Dersleri 14 – Koleksiyon API (Collection API) Kuyruklar (Queue) Koleksiyon API’sine ait diğer bir arayüz kuyruk (queue) arayüzüdür. Temel...
- Java Dersleri 15 – Koleksiyon API (Collection API) Map Map arayüzü anahtar-değer ikililerini bir arada tutmak için tasarlanmıştır. Matemetikteki...
- Java Dersleri 12 – String İşlemleri Bu dersimizde Java’nın ve diğer dillerin en temel elemanlarından olan...
- Java Dersleri 16 – Enum Yapısı Java da enum yapıları 1.5 versiyonuyla birlikte gelmiştir. Bu versiyondan...
- Java Dersleri 3 – Kontrol Yapıları Bu dersimizde Java’nın kodun akışına yön veren kontrol ifadelerinin kullanımını...


(3 oy verilmiş, ortalama: 8,67) <-- Oy Vermeden Geçme
0 Yorum.