1. ArrayListsınıf

Bugün sınıfı inceleyeceğiz ArrayList. Bu, koleksiyonlar olarak bilinen birkaç sınıfın ilkidir . Java'da koleksiyonlar o kadar geniş ve kullanışlı bir konudur ki, CodeGym görevinin tamamı bunlara ayrılmıştır.

Koleksiyonların nasıl yapılandırıldığını ve tüm nüanslarını tam olarak anlamak için önce OOP'yi, arabirimleri, kalıtımı, çoklu okumanın temellerini ve çok daha fazlasını öğrenmeniz gerekir.

Bu yüzden bugün en basit koleksiyon türüyle tanışacağız. Ama nasıl kullanılacağını ve nasıl çalıştığını anlamanız için yeterince derin bir seviyede. Şimdi koleksiyonla ArrayListtanışın .

arka plan

Biraz arka planla başlayacağım. Programcılar dizilerin bir yönünü gerçekten sevmediler: boyutlarının değiştirilememesi. Bir dizide üç öğe daha depolamanız gerekirse, ancak yalnızca bir boş hücre varsa ne olur?

Bir dizinin alan sınırlamalarına tek çözüm, saklamanız gerekebilecek tüm öğeleri barındırmak için çok büyük bir dizi oluşturmaktı. Ancak bu genellikle bir hafıza kaybıydı. Bir dizi genellikle iki veya üç öğe içeriyorsa, ancak 100 tanesini saklaması gerekecek gibi küçük bir ihtimal bile varsa, o zaman 100 tanesini saklama kapasitesine sahip bir dizi oluşturmak gerekliydi.

Peki programcılar ne buldu? ArrayListSınıfla aynı işi yapan Array, ancak yeniden boyutlandırılabilen sınıfı yazdılar .

ArrayList sınıfı

Sınıfın adı ArrayListiki kelimeden oluşur: Array + List. Arraybir dizidir ve Listbir listedir.

Her ArrayListnesne sıradan bir eleman dizisi içerir. Bir öğesinden öğeleri okuduğunuzda ArrayList, nesne bunları kendi iç dizisinden alır. Öğeleri yazdığınızda, onları dahili diziye yazar.

ArrayList sınıfı, dizilerin sahip olduğu tüm dezavantajlardan yoksundur. Nasıl yapılacağını bilir:

  • Belirli bir türdeki öğeleri saklayın
  • Listeyi dinamik olarak yeniden boyutlandır
  • Listenin sonuna eleman ekle
  • Listenin başına veya ortasına öğe ekle
  • Listedeki herhangi bir yerden öğeleri kaldırın

Daha fazla ayrıntı için aşağıya bakın:


2. Bir ArrayListnesne oluşturma

Bir nesne oluşturmak için ArrayListşöyle bir kod yazmanız gerekir:

ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();

ArrayListKoleksiyon türü/sınıfı nerede, koleksiyonda TypeParameterdepolanan öğelerin türü ArrayListve namebir değişkenin adıdır ArrayList<TypeParameter>.

Değişkenin namegenel bir türü vardır. İki türden oluşur: önce koleksiyonun türü belirtilir ve ardından koleksiyonda depolanan öğelerin türünü belirtmek için köşeli parantezler kullanılır.

Örnekler:

kod Tanım
ArrayList<Integer> list = new ArrayList<Integer>();
tam sayıların listesi
ArrayList<String> list = new ArrayList<String>();
Dizelerin listesi
ArrayList<Double> list = new ArrayList<Double>();
Gerçek sayıların listesi

Dizilerin aksine, koleksiyonlar ilkel türleri depolayamaz, yalnızca referans türleri depolayabilir . Bu nedenle, bir s koleksiyonuna ihtiyacınız varsa int, Integerbunun yerine sarmalayıcı sınıfını kullanın.


3. İşlemlerArrayList

Başlangıçta, yeni oluşturulan listenin uzunluğu, 0 öğe içerdiğinden sıfırdır. Listeye bir eleman eklerseniz uzunluğu 1 artar. Eklenen elemanı kaldırırsanız uzunluk tekrar sıfıra düşer.

Aşağıdaki tablo size sınıfın yöntemleri hakkında daha fazla bilgi verebilir ArrayList:

Yöntemler Tanım
void add(Type value)
Geçen öğeyi listeye ekler
void add(int index, Type value)
Listede belirli bir konuma bir öğe ekler.
Type get(int index)
Dizini olan öğeyi döndürürindex
void set(int index, Type value)
valueDizini olan öğeye atarindex
Type remove(int index)
Dizini olan öğeyi kaldırır index. Kaldırılan öğeyi döndürür.
Type remove(Type value)
Yönteme ilettiğiniz öğeyi kaldırır. Bu türden birden fazla öğe varsa, ilki kaldırılacaktır.
void clear()
Listeyi temizler, yani listedeki tüm öğeleri kaldırır.
boolean contains(Type value)
Listenin içerip içermediğini kontrol eder value.
boolean isEmpty()
Listenin boş olup olmadığını kontrol eder. Başka bir deyişle, listenin uzunluğunun sıfır olup olmadığı.
int size()
Listenin boyutunu, yani listedeki öğe sayısını döndürür.
Type[] toArray(Type[] array)
Listenin öğelerini içeren bir dizi döndürür.
Diziyi yönteme geçirmeniz gerekir.

Bu yöntemler, listeyle yapmak isteyebileceğiniz hemen hemen her şeyi yapmanızı sağlar: öğeleri değiştirin, öğeler ekleyin ve öğeleri kaldırın. Listeyi tek bir komutla temizleyebilir, hatta listeyi bir diziye dönüştürebilirsiniz.



4. Karşılaştırma ArrayListveArray

ArrayListBir diziyi karşılaştırmaktan kaçınabileceğimizi sanmıyorum .

Dizilerle gerçekleştirebileceğiniz yalnızca 4 eylem vardır:

  • Dizi oluştur
  • Dizine göre bir öğe al
  • Bir öğeyi dizine göre ayarla
  • Dizinin uzunluğunu al

İşte bir dizi ve an için geçerli olan bu işlemler ArrayList:

Sıralamak Dizi Listesi
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Bye";
list.set(0, "Bye");
int count = array.length;
int count = list.size();

ArrayListBir dizinin nasıl çalıştığına karşı a'nın nasıl çalıştığını karşılaştıralım . Örneğin, şu görevi uygulayalım: "klavyeden 10 dize oku ve bunları ekranda ters sırada göster"

Diziyi Kullanma ArrayList'i Kullanma
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// Display the contents of the array on the screen
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

// Display the contents of the collection on the screen
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

Analoji açıktır. Diziler için her şey bir şekilde daha kısa ve net. Ancak ArrayListzor da değil: bir öğe elde etmek için yöntemi kullanıyoruz get(); bir öğeyi değiştirmek için set()yöntem; listenin uzunluğunu almak için, size()yöntem.

Peki programcılar neden sınıfı kullanıyor ArrayList?

Elbette asıl mesele, sıradan dizilerin sahip olmadığı diğer tüm yöntemlerdir:

  • Listeye bir öğe ekleyin
  • Listenin ortasına bir öğe ekleyin
  • Listede bir öğe bulun
  • Bir öğeyi listeden kaldırma