Rumah > Java > javaTutorial > Koleksi

Koleksi

WBOY
Lepaskan: 2024-07-17 08:51:37
asal
507 orang telah melayarinya

Antara muka Koleksi mentakrifkan operasi biasa untuk senarai, vektor, tindanan, baris gilir, baris gilir keutamaan dan set.

Rangka Kerja Koleksi Java menyokong dua jenis bekas:

  • Satu untuk menyimpan koleksi elemen dipanggil koleksi.
  • Yang lain, untuk menyimpan pasangan kunci/nilai, dipanggil peta.

Peta ialah struktur data yang cekap untuk mencari elemen dengan cepat menggunakan kunci. Berikut ialah koleksi berikut.

  • Setsimpan sekumpulan elemen bukan pendua.
  • Senaraimenyimpan koleksi elemen yang teratur.
  • Timbunanmenyimpan objek yang diproses dengan cara masuk terakhir, keluar dahulu.
  • Barisanmenyimpan objek yang diproses dengan cara masuk dahulu, keluar dahulu.
  • PriorityQueuemenyimpan objek yang diproses mengikut urutan keutamaannya.

Ciri biasa koleksi ini ditakrifkan dalam antara muka dan pelaksanaan disediakan dalam kelas konkrit, seperti ditunjukkan dalam Rajah di bawah.

Image description

Semua antara muka dan kelas yang ditakrifkan dalam Rangka Kerja Koleksi Java dikumpulkan dalam pakej java.util.

Reka bentuk Rangka Kerja Koleksi Java ialah contoh terbaik untuk menggunakan antara muka, kelas abstrak dan kelas konkrit. Antara muka mentakrifkan rangka kerja. Kelas abstrak menyediakan pelaksanaan separa. Kelas konkrit melaksanakan antara muka dengan struktur data konkrit. Menyediakan kelas abstrak yang melaksanakan sebahagian antara muka memudahkan pengguna menulis kod. Pengguna hanya boleh menentukan kelas konkrit yang memanjangkan kelas abstrak sebaliknya melaksanakan semua kaedah dalam antara muka. Kelas abstrak seperti AbstractCollection disediakan untuk kemudahan. Atas sebab ini, ia dipanggil kelas abstrak kemudahan.

Antara muka Koleksi ialah antara muka akar untuk memanipulasi koleksi objek. Kaedah awamnya disenaraikan dalam Rajah di bawah. Kelas AbstractCollection menyediakan pelaksanaan separa untuk antara muka Collection. Ia melaksanakan semua kaedah dalam Koleksi kecuali kaedah tambah, saiz dan iterator. Ini dilaksanakan dalam subkelas konkrit yang sesuai.

Image description

Antara muka Koleksi menyediakan operasi asas untuk menambah dan mengalih keluar elemen dalam koleksi. Kaedah tambah menambah elemen pada koleksi. Kaedah addAll menambah semua elemen dalam koleksi yang ditentukan pada koleksi ini. Kaedah buang mengalih keluar elemen daripada koleksi. Kaedah removeAll mengalih keluar elemen daripada koleksi ini yang terdapat dalam koleksi yang ditentukan. Kaedah retainAll mengekalkan elemen dalam koleksi ini yang turut terdapat dalam koleksi yang ditentukan. Semua kaedah ini mengembalikan boolean. Nilai pulangan adalah benar jika koleksi diubah hasil daripada pelaksanaan kaedah. Kaedah clear() hanya mengalih keluar semua elemen daripada koleksi.

Kaedah addAll, removeAll dan retainAll adalah serupa dengan set kesatuan, perbezaan dan operasi persilangan.

Antara muka Koleksi menyediakan pelbagai operasi pertanyaan. Kaedah saiz mengembalikan bilangan elemen dalam koleksi. Kaedah mengandungi menyemak sama ada koleksi mengandungi elemen yang ditentukan. Kaedah mengandungiSemua menyemak sama ada koleksi mengandungi semua elemen dalam koleksi yang ditentukan. Kaedah isEmpty mengembalikan benar jika koleksi kosong.

Antara muka Koleksi menyediakan kaedah toArray(), yang mengembalikan perwakilan tatasusunan untuk koleksi.

Sesetengah kaedah dalam antara muka Koleksi tidak boleh dilaksanakan dalam subkelas konkrit. Dalam kes ini, kaedah akan membuang java.lang.UnsupportedOperationException, subkelas RuntimeException. Ini adalah reka bentuk yang bagus yang boleh anda gunakan dalam projek anda. Jika kaedah tidak mempunyai makna dalam subkelas, anda boleh melaksanakannya seperti berikut:

public void someMethod() {
buang UnsupportedOperationException
baharu ("Kaedah tidak disokong");
}

Kod di bawah memberikan contoh untuk menggunakan kaedah yang ditakrifkan dalam antara muka Koleksi.

package demo;
import java.util.*;

public class TestCollection {

    public static void main(String[] args) {
        ArrayList<String> collection1 = new ArrayList<>();
        collection1.add("New York");
        collection1.add("Atlanta");
        collection1.add("Dallas");
        collection1.add("Madison");

        System.out.println("A list of cities in collection1:");
        System.out.println(collection1);

        System.out.println("\nIs Dallas in collection1? " + collection1.contains("Dallas"));

        collection1.remove("Dallas");
        System.out.println("\n" + collection1.size() + " cities are in collection1 now");

        Collection<String> collection2 = new ArrayList<>();
        collection2.add("Seattle");
        collection2.add("Portland");
        collection2.add("Los Angeles");
        collection2.add("Atlanta");

        System.out.println("\nA list of cities in collection2:");
        System.out.println(collection2);

        ArrayList<String> c1 = (ArrayList<String>)(collection1.clone());
        c1.addAll(collection2);
        System.out.println("\nCities in collection1 or collection2: ");
        System.out.println(c1);

        c1 = (ArrayList<String>)(collection1.clone());
        c1.retainAll(collection2);
        System.out.print("\nCities in collection1 and collection2: ");
        System.out.println(c1);

        c1 = (ArrayList<String>)(collection1.clone());
        c1.removeAll(collection2);
        System.out.print("\nCities in collection1, but not in 2: ");
        System.out.println(c1);
    }

}

Salin selepas log masuk

Senarai bandar dalam koleksi1:
[New York, Atlanta, Dallas, Madison]
Adakah Dallas dalam koleksi1? benar
3 bandar berada dalam koleksi1 sekarang
Senarai bandar dalam koleksi2:
[Seattle, Portland, Los Angeles, Atlanta]
Bandar dalam koleksi1 atau koleksi2:
[New York, Atlanta, Madison, Seattle, Portland, Los Angeles, Atlanta]
Bandar dalam koleksi1 dan koleksi2: [Atlanta]
Bandar dalam koleksi1, tetapi bukan dalam 2: [New York, Madison]

Atur cara mencipta objek koleksi konkrit menggunakan ArrayList (baris 7), dan menggunakan antara muka Koleksi mengandungi kaedah (baris 16), alih keluar kaedah (baris 18), kaedah saiz (baris 19), kaedah tambahSemua (baris 31), kaedah kekalkanSemua (baris 36), dan Kaedah buangSemua (baris 41).

Untuk contoh ini, kami menggunakan ArrayList. Anda boleh menggunakan mana-mana kelas konkrit Koleksi seperti HashSet, LinkedList, Vektor dan Stack untuk menggantikan ArrayList untuk menguji kaedah ini yang ditakrifkan dalam antara muka Koleksi.

Atur cara mencipta salinan senarai tatasusunan (baris 30, 35, 40). Tujuannya adalah untuk mengekalkan senarai tatasusunan asal dan menggunakan salinannya untuk melaksanakan operasi addAll, retainAll dan removeAll.

Semua kelas konkrit dalam Rangka Kerja Koleksi Java melaksanakan antara muka java.lang.Cloneable dan java.io.Serializable kecuali java.util.PriorityQueue tidak melaksanakan antara muka Boleh Diklon. Oleh itu, semua tika Boleh Diklon kecuali baris gilir keutamaan boleh diklon dan semua tika Boleh Diklon boleh bersiri.

Atas ialah kandungan terperinci Koleksi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan