JavaRush /Java Blog /Random-ID /Daftar Array di Java

Daftar Array di Java

Dipublikasikan di grup Random-ID
Saat mengembangkan, seringkali sulit untuk memprediksi ukuran array yang dibutuhkan. Oleh karena itu, fungsi pengalokasian memori secara dinamis saat program sedang berjalan diperlukan untuk setiap bahasa pemrograman. Array dinamis adalah array yang ukurannya dapat berubah selama eksekusi program. Di Java, ada kelas ArrayList untuk tujuan ini .

Apa itu kelas ArrayList?

ArrayList adalah implementasi array yang dapat diubah dari antarmuka Daftar, bagian dari Collection Framework, yang bertanggung jawab atas daftar (atau array dinamis) yang terletak di paket java.utils. Kelas ini mengimplementasikan semua operasi daftar opsional dan menyediakan metode untuk mengontrol ukuran array yang digunakan untuk menyimpan daftar. ArrayList didasarkan pada gagasan array dinamis. Yakni kemampuan menambah dan menghapus elemen, sekaligus menambah atau mengurangi sesuai kebutuhan.

Apa yang disimpan oleh ArrayList?

Hanya tipe referensi, objek apa pun, termasuk kelas pihak ketiga. String, aliran keluaran, koleksi lainnya. Kelas wrapper digunakan untuk menyimpan tipe data primitif.

Konstruktor Daftar Array

  1. Daftar Array()

    Konstruktor kosong dengan kapasitas array internal awal = 10.

    ArrayList<String> list = new ArrayList<>();

    Dianjurkan untuk menunjukkan jenis nilai yang disimpan dalam tanda kurung sudut. Dalam contoh di atas - String.

  2. ArrayList(Koleksi <? extends E> c)

    Konstruktor menerima koleksi lain, membuat array baru dengan elemen koleksi yang diteruskan:

    ArrayList<String> list2 = new ArrayList<>(list);

    Urutan elemen dalam daftar baru akan sama dengan aslinya.

  3. Daftar Array(int Kapasitas awal)

    Parameter konstruktor adalah nilai ukuran awal array internal.

    ArrayList<String> list2 = new ArrayList<>(10000);

    Jika ArrayList yang mendasarinya kehabisan ruang saat elemen baru ditambahkan, array baru yang lebih besar akan dibuat dan data disalin ke dalamnya. Jika Anda mengetahui sebelumnya saat menulis kode bahwa sejumlah besar elemen akan diproses dalam array, Anda harus menentukan nilai yang lebih besar untuk tujuan pengoptimalan.

Metode Daftar Array

    Di bawah ini adalah metode utama ArrayList.

  • tambahkan(E e)

    Menambahkan elemen baru ke akhir daftar. Mengembalikan boolean-nilai ( benar - sukses, salah - tidak ditambahkan):

    ArrayList<String> list = new ArrayList<>();
    list.add("Hello");
  • tambahkan(int indeks, elemen E)

    Menambahkan elemen elementpada indeks posisi. Saat menambahkan, semua elemen di sebelah kanan indeks yang ditentukan digeser 1 posisi ke kanan:

    list.add(0, "Amigo");

    Sangat berguna ketika Anda perlu menyisipkan elemen di mana pun dalam daftar, tetapi untuk operasi penyisipan yang sering dilakukan di awal dan tengah ArrayList mungkin bukan pilihan yang baik - Anda harus melihat ke LinkedList.

  • addAll(Koleksi <? extends E> koleksi)

    Menambahkan semua elemen koleksi ke daftar sesuai urutan kemunculannya dalam koleksi.

  • addAll(int indeks, Koleksi <? extends E> koleksi)

    Menambahkan semua elemen collectionke daftar mulai dari indeks index. Dalam hal ini, semua elemen akan bergeser ke kanan dengan jumlah elemen dalam daftar collection:

    ArrayList<String> secondList = new ArrayList<>();
    secondList.addAll(list);
    System.out.println("First addition: " + secondList);
    secondList.addAll(1, list);
    System.out.println("Second addition in the middle: " + secondList);

    Kesimpulan:

    
    Первое добавление: [Amigo, Hello]
    Второе добавление в середину: [Amigo, Amigo, Hello, Hello]

    Metode ini addAll()juga mengembalikan hasil boolean dari penambahan elemen.

  • jernih()

    Menghapus semua elemen dari daftar.

  • klon()

    Mengembalikan objek salinan array:

    ArrayList<String> copyOfSecondList = (ArrayList<String>) secondList.clone();
    secondList.clear();
    System.out.println(copyOfSecondList);

    Kesimpulan:

    
    [Amigo, Amigo, Hello, Hello]

    Harap dicatat bahwa metode ini clone()kembali Object, jadi setelah memanggilnya Anda harus melakukan cast ke kelas yang diperlukan.

    При клонировании создается новый независимый an object. В примере показано, How очищение клонированного an object не сказалось на составе его клона.

  • contains(Object o)

    Проверка наличие an object в списке, возвращает boolean-meaning.

    System.out.println(copyOfSecondList.contains("Hello"));
    System.out.println(copyOfSecondList.contains("Check"));

    Вывод:

    
    true
    false
  • ensureCapacity(int minCapacity)

    Увеличивает размер внутреннего массива, чтобы в него поместилось количество элементов, переданных в minCapacity. Если массив достаточно вместителен, ниHowие преобразования не производятся.

    Этот метод полезен, когда возникает потребность вместить большое количество элементов в несколько итераций. Например, при создании списка емкость его внутреннего массива — 10. При загрузке данных по сети они обрабатываются асинхронно порциями и результаты помещаются в массив. Если ожидается доставка 10 000 элементов, может быть неэффективно просто добавлять эти данные каждый раз: достаточно будет в начале обработки вызвать метод ensureCapaciry(10000) и записывать туда данные по мере необходимости.

  • forEach(Consumer<? super E> action)

    Обработать в цикле ArrayList можно стандартными способами, цикл for:

    // First way
    for(int i = 0; i< secondList.size(); i++) {
       System.out.println(secondList.get(i));
    }
    И цикл for-each:
    // Second way
    for(String s : secondList) {
       System.out.println(s);
    }

    В классе ArrayList есть метод для обработки каждого element, который называется также, forEach. В качестве аргумента передается реализация интерфейса Consumer, в котором нужно переопределить метод accept():

    secondList.forEach(new Consumer<String>() {
       @Override
       public void accept(String s) {
           System.out.println(s);
       }
    });

    Вывод:

    
    Amigo
    Amigo
    Hello
    Hello

    Метод accept принимает в качестве аргумента очередной элемент того типа, который хранит в себе ArrayList. Пример для Integer:

    ArrayList<Integer> integerList = new ArrayList<>();
    integerList.forEach(new Consumer<Integer>() {
       @Override
       public void accept(Integer integer) {
           System.out.println(integer);
       }
    });

    Метод action() будет выполнен для каждого element.

  • get(int index)

    returns элемент, который расположен в указанной позиции списка.

    Если index < 0 or index >= максимального количества элементов списка, будет выброшено исключение IndexOutOfBoundsException.

    Это основной метод получения element из списка, время извлечения element по индексу всегда будет одинаковым, независимо от размера ArrayList.

  • indexOf(Object o)

    Метод возвращает индекс первого вхождения element в списке. Если element не существует в списке, метод вернет -1.

  • isEmpty()

    Метод возвращает true, если список пустой, false в обратном случае.

    Если в списке содержатся только элементы null, метод вернет false. Иными словами, null элементы также учитываются этим методом.

  • iterator()

    returns итератор для списка для последующего использования в цикле or при любой другой обработке.

    Итератор для ArrayList — fail-fast. Это значит, что если коллекция изменится во время итерации, будет выброшено исключение ConcurrentModificationException. Подробнее об fail-fast и его противоположности fail-safe можно почитать здесь.

  • lastIndexOf(Object o)

    Функционал метода похож на indexOf(), отличие в том, что возвращается индекс последнего element в списке.

    Если элемент не найден, также возвращает -1.

  • remove(int index)

    Удаление element в указанной позиции индекса. После удаления сдвигает все элементы влево для заполнения освободившегося пространства.

    Jika index<0atau >=jumlah elemen daftar, pengecualian akan dilempar IndexOutOfBoundsException. Hasilnya, metode ini mengembalikan elemen yang telah dihapus.

  • hapus(Objek o)

    Metode ini menghapus elemen yang diteruskan dari daftar o. Jika suatu elemen ada dalam daftar, maka elemen tersebut akan dihapus dan semua elemen digeser ke kiri. Jika elemen ada dalam daftar dan berhasil dihapus, metode akan mengembalikan nilai true; jika tidak, false .

  • hapusSemua(Koleksi<?> c)

    Jika Anda perlu menghapus beberapa elemen, Anda tidak boleh melakukannya dalam loop bersyarat: akan jauh lebih nyaman dan aman menggunakan metode ini removeAll(). Ia menerima kumpulan elemen yang akan dihapus dari daftar.

    Koleksi harus berisi elemen dengan tipe yang sama dengan yang disimpan oleh daftar target. Jika tidak maka akan dibuang ClassCastException. Metode ini akan mengembalikan nilai true jika daftar telah diubah sebagai hasil dari pemanggilan metode.

  • set(indeks int, elemen E)

    Menggantikan elemen pada posisi yang ditentukan indexdengan elemen yang dilewati element. Indeks juga harus lebih besar dari nol dan lebih kecil dari indeks elemen terakhir, jika tidak, pengecualian akan dilempar IndexOutOfBoundsException.

  • ukuran()

    Cara terbaik (hampir satu-satunya) untuk mengetahui ukuran sebuah array.

  • sortir(Pembanding<? super E> c)

    Menyortir daftar menurut aturan yang diberikan. Aturan pengurutan adalah antarmuka yang diimplementasikan Comparatordengan metode yang diganti compareTo().

    Penggantian diperlukan jika koleksi berisi objek dari kelasnya sendiri. Saat bekerja dengan kelas standar ( Integer, Stringdan seterusnya), penggantian compareTo()hanya diperlukan untuk penyortiran non-standar.

  • keArray()

    Mengonversi daftar menjadi array tetap. Perhatikan bahwa metode ini mengembalikan array objek ( Object[]). Jika Anda perlu mengonversi daftar menjadi larik objek bertipe tertentu, Anda bisa meneruskan larik ke mana elemen daftar akan dipindahkan sebagai parameter ke metode.

    Contoh:

    String[] array = new String[secondList.size()];
    secondList.toArray(array);
    for(int i = 0; i< array.length; i++) {
       System.out.println(array[i]);
    }

    Kesimpulan:

    
    Amigo
    Amigo
    Hello
    Hello
Metode ArrayList di Java dipelajari dalam kursus JavaRush. Perkenalan pertama terjadi pada level ketujuh dari pencarian Sintaks Java, pada kuliah “Kelas ArrayList” . Pada tingkat yang sama ada kumpulan tugas - satu dan dua , di mana Anda perlu menggunakan metode ArrayList, contoh tambahan bekerja dengan ArrayList dan obat generik diberikan, dan perbedaan antara ArrayList dan LinkedList dijelaskan. Ini adalah topik studi yang luas, oleh karena itu, dalam satu atau lain bentuk, Daftar Array di Java (metode kelas ini hanya sebagian dari keseluruhan pengetahuan yang layak untuk dipelajari) dikembalikan ke kursus pada tingkat berikut pelatihan - Inti, Koleksi, Multithreading. Kami percaya bahwa latihan menulis kode sehari-hari adalah kunci utama kesuksesan dalam pemrograman. Oleh karena itu, 80% JavaRush terdiri dari tugas praktik, proyek mini, dan tugas permainan. Semua ini adalah ratusan jam pengkodean yang akan membantu meningkatkan keterampilan Anda.

Tautan untuk bacaan lebih lanjut

  1. Artikel mendetail tentang array dinamis , atau lebih tepatnya tentang ArrayListdan LinkedList, yang menjalankan perannya dalam bahasa Java.
  2. Artikel tentang menghapus elemen dari ArrayList .
  3. Kuliah tentang bekerja dengan ArrayList dalam diagram dan gambar .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION