Java - ArrayList

Java - ArrayList

Arkadaşlar merhaba,

Bu yazımızda Java'da ArrayList'e göz atacağız.

ArrayList Nedir ?

ArrayList gerektiğinde çalışma zamanında kapasiteyi değiştirebilir.

Bir dizi gibi, bir ArrayList, aynı elemandan birden fazla tutmaya izin veren sıralı bir dizidir.

ArrayList kullanımı için import işlemi gereklidir.

import java.util.*;
import java.util.ArrayList;

ArrayList Oluşturma

ArrayList list1 = new ArrayList();
ArrayList list2 = new ArrayList(10);
ArrayList list3 = new ArrayList(list2);

ArrayList<String> list4 = new ArrayList<String>();
ArrayList<String> list5 = new ArrayList<>();

İlk örnek varsayılan öğe sayısı için boşluk içeren bir ArrayList oluşturmayı ancak henüz herhangi bir yuvayı doldurmamayı söylüyor.

İkincisi, belirli sayıda slot içeren bir ArrayList oluşturmayı, ancak yine hiçbirini atama yapmamayı söylüyor.

Son örnek, Java'ya başka bir ArrayList'in bir kopyasını yapmak istediğimizi söyler. Bu ArrayList'in hem boyutunu hem de içeriğini kopyalarız.

ArrayList var ile Kullanımı

var ile kullanımda değişken türü ArrayList şeklindedir.

Bu, bir String ekleyebileceğiniz veya String nesneleri arasında döngü yapabileceğiniz anlamına gelir.

var strings = new ArrayList<String>();
strings.add("a");
for (String s : strings) {
  .....        
}
var list = new ArrayList<>();
 list.add("a");
        for (Object s : list) { // tip geçmediğimiz için Object'e geçtik
   }

Değişken türü ArrayList şeklindedir. Elmas operatöründe bir tür olmadığından, Java'nın yapabileceği en genel seçeneği alması gerekir. Bu nedenle, nihai üst sınıf olan Object'i seçer.

Object'in herhangi bir alt sınıfını ekleyebilirsiniz. Ancak döngüde String yerine Object tipini kullanmamız gerekiyor.

List<String> list6 = new ArrayList<>();

ArrayList<String> list7 = new List<>(); // DOES NOT COMPILE 

// list bir interfacedir ArrayList onun implementi olduğu için compile olmaz.

ArrayList, List adlı bir interface uygular. Başka bir deyişle, bir ArrayList bir Listedir.

Bu arada, bir ArrayList'i List referans değişkeninde saklayabileceğinizi, ancak bunun tersini yapamayacağınızı bilin. Bunun nedeni, List'in bir interface olması ve interfacelerin somutlaştırılamamasıdır.

ArrayList Methodlar

add()

add() methodu ile ArrayList'e yeni bir değer ekleyebiliriz. Method imzaları aşağıdaki gibidir.

boolean add(E element)

void add(int index, E element)

ArrayList list10 = new ArrayList();
list10.add("umut"); // [umut]
list10.add(Boolean.TRUE); // [umut, true]

System.out.println(list10); // [umut, true]

// tür belirtmedik bu nedenle tür primitive'ler dışında herşeyi içeren Object'dir.
ArrayList<String> s = new ArrayList<>();
s.add("umut");

s.add(Boolean.TRUE); // String geçtiğimiz için boolean kabul etmez.

Ayrıca index'lerini belirterek listeye ekleme yapabiliriz.

List<String> birds = new ArrayList<>();
birds.add("pigeon"); // [pigeon];
birds.add(1, "seagull"); // [pigeon, seagull]
birds.add(0, "blue jay"); // [blue jay, pigeon, seagull]
birds.add(1, "cardinal"); // [blue jay, cardinal, pigeon, seagull]

remove()

Belirtilen index'deki veya ilk eşleşen değeri siler.

List<String> birds1 = new ArrayList<>();
birds1.add("hawk"); // [hawk]
birds1.add("hawk"); // [hawk, hawk]
System.out.println(birds1.remove("cardinal")); // prints false => öğe olmadığı için false

System.out.println(birds1.remove("hawk")); // true
System.out.println(birds1.remove(0)); // prints hawk
System.out.println(birds1); // []

// Örneğin, birds1.remove(100) bir IndexOutOfBoundsException oluşturur.

set()

set() methodu, boyutu değiştirmeden ArrayList öğelerinden birini değiştirir.

List<String> birds2 = new ArrayList<>();
System.out.println(birds.isEmpty()); // true
System.out.println(birds.size()); // 0

birds2.add("hawk"); // [hawk];
System.out.println(birds.size()); // 1

birds.set(0, "robin"); // [robin]
System.out.println(birds.size()); // 1

birds.set(1, "robin"); 

// Son satır ArrayList'te olmayan bir öğeyi değiştirmeye çalışır. Boyut 1 olduğundan, tek  geçerli dizin 0'dır. 
// Java buna izin verilmediğinden bir istisna atar.

isEmpty() ve size()

isEmpty() liste boş mu değil mi kontrol eder ve size() methodu, kaç slot'un kullanımda olduğuna bakar.

System.out.println(birds2.isEmpty()); // false
System.out.println(birds2.size()); // 2

birds.add("hawk"); // [hawk]
birds.add("hawk"); // [hawk, hawk]

System.out.println("isEmpty() :" + birds.isEmpty()); // false
System.out.println("size : " + birds.size()); // 2

clear()

clear() methodu, ArrayList'in tüm öğelerini siler.

birds2.clear();// []

contains()

ArrayList'te belirli bir değerin olup olmadığını kontrol eder. Bu method,herhangi bir eşleşme olup olmadığını görmek için ArrayList öğesinin her öğesinde equals() methodunu çağırır.

List<String> name = new ArrayList<>();
name.add("umut");

System.out.println(name.contains("umut")); // true
System.out.println(name.contains("ahmet")); // false

equals()

Son olarak, ArrayList'in özel bir equals() uygulaması vardır, böylece aynı öğeleri aynı sırada içerip içermediklerini görmek için iki listeyi karşılaştırabilirsiniz.

Boyut olarak eşit veya aynı sırada değiller ise eşit değillerdir.

List<String> one = new ArrayList<>();
List<String> two = new ArrayList<>();
System.out.println(one.equals(two)); // true

one.add("a"); // [a]
System.out.println(one.equals(two)); // false

two.add("a"); // [a]
System.out.println(one.equals(two)); // true

one.add("b"); // [a,b]
two.add(0, "b"); // [b,a]

System.out.println(one.equals(two)); // false

Umarım faydalı olmuştur.