Rumah >Java >javaTutorial >Bagaimana untuk menentukan dan melaksanakan ArrayList dan senarai jujukan dalam Java
Jadual linear ialah struktur data yang paling asas, paling mudah dan paling biasa digunakan. Urutan terhingga, yang mengandungi n elemen data dengan ciri yang sama, dipanggil senarai linear dan merupakan sejenis struktur data.
Senarai linear biasa: senarai berjujukan, senarai terpaut, tindanan, baris gilir...
Senarai linear ialah struktur linear secara logik, iaitu, ia adalah garis lurus berterusan. Bentuk storan fizikal jadual linear biasanya merupakan susunan atau struktur senarai terpaut, tetapi ia tidak semestinya berterusan.
Mesti ada hanya satu "elemen pertama" dalam set.
Mesti ada hanya satu "elemen terakhir" dalam set.
Kecuali elemen terakhir, semua elemen mempunyai pengganti yang unik (akibat).
Kecuali elemen pertama, semua elemen mempunyai pendahulu yang unik (antecedent).
Struktur linear biasanya disimpan dalam bentuk tatasusunan dipanggil jadual jujukan, yang menyimpan elemen data dalam fizikal dalam sel ingatan dengan alamat berturut-turut. Lengkapkan penambahan, pemadaman, penyemakan dan pengubahsuaian data pada tatasusunan.
Mula-mula kita perlu mencipta tatasusunan untuk menyimpan data.
Nota: Kerana saya mencipta tatasusunan integer terlebih dahulu untuk kemudahan, untuk menyesuaikan diri dengan lebih baik kepada pelbagai jenis, anda boleh mencipta tatasusunan generik, yang saya tiada di sini .
Langkah seterusnya ialah melakukan pelbagai operasi pada jadual jujukan. Contohnya: CURD asas, mencetak jadual jujukan, mendapatkan panjang jadual jujukan, mengosongkan jadual jujukan, dsb.
Oleh kerana ia adalah tatasusunan, hanya lintasi tatasusunan dan cetak terus
Apabila menambah elemen, adalah perlu untuk mempertimbangkan sama ada tatasusunan penuh, jadi kita perlu membuat pertimbangan Jika ruang tatasusunan penuh, ia perlu dikembangkan. Selain itu, kita juga perlu menentukan sama ada jawatan pos ini sah.
Bagaimana untuk menilai sama ada ruang itu penuh
Di sini kami memudahkan kod sebagai:
Jika anda mahu Dalam kes pengembangan, selepas pengembangan selesai, kerana jadual jujukan adalah struktur berterusan, jika elemen baru ditambah pada kedudukan pos, elemen selepas kedudukan pos akan dialihkan semula mengikut urutan. Hanya dengan cara ini elemen baharu boleh ditambah.
Nota: Selepas pengembangan, kita perlu menukar saiz CAPACITY dan usedSize.
Di sini kita perlu mempertimbangkan sama ada tatasusunan kosong pada masa ini.
Selepas itu, ia masih merupakan traversal terus tatasusunan.
juga memerlukan operasi nol di sini.
Mungkin terdapat situasi di mana tatasusunan kosong dan pos adalah menyalahi undang-undang, jadi pertimbangan diperlukan.
Saya membuang pengecualian secara manual di sini, saya tidak menulis apa-apa lagi.
Padam elemen pada titik tertentu position , anda boleh terus membiarkan elemen di belakangnya menutupinya untuk mencapai pemadaman.
Operasi berikut agak mudah dan tidak akan diterangkan secara terperinci.
Dalam rangka kerja koleksi, ArrayList ialah kelas biasa yang melaksanakan antara muka Senarai Gambar rajah rangka kerja khusus adalah seperti berikut:
[Penjelasan]
ArrayList melaksanakan antara muka RandomAccess, menunjukkan bahawa ArrayList menyokong akses rawak.
ArrayList melaksanakan antara muka Boleh Diklon, menunjukkan bahawa ArrayList boleh diklon.
ArrayList melaksanakan antara muka Serializable, menunjukkan bahawa ArrayList menyokong serialisasi.
Tidak seperti Vektor, ArrayList tidak selamat untuk benang dan boleh digunakan dalam satu utas Dalam berbilang benang, anda boleh memilih Vector atau CopyOnWriteArrayList.
Lapisan bawah ArrayList ialah ruang berterusan dan boleh dikembangkan secara dinamik. Ia adalah senarai jujukan jenis dinamik.
public static void main(String[] args) { // ArrayList创建,推荐写法 // 构造一个空的列表 List<Integer> list1 = new ArrayList<>(); // 构造一个具有10个容量的列表 List<Integer> list2 = new ArrayList<>(10); list2.add(1); list2.add(2); list2.add(3); // list2.add("hello"); // 编译失败,List<Integer>已经限定了,list2中只能存储整形元素 // list3构造好之后,与list中的元素一致 ArrayList<Integer> list3 = new ArrayList<>(list2); // 避免省略类型,否则:任意类型的元素都可以存放,使用时将是一场灾难 List list4 = new ArrayList(); list4.add("111"); list4.add(100); }
方法 | 解释 |
boolean add(E e) | 尾插e |
void add(int index, E element) | 将 e 插入到 index 位置 |
boolean addAll(Collection extends E> c) | 将集合 c 中的元素 尾插到该集合中 |
E remove(int index) | 删除 index 位置元素并返回 |
boolean remove(Object o) | 删除遇到的第一个 o |
E get(int index) | 获取下标 index 位置元素 |
E set(int index, E element) | 将下标 index 位置元素设置为 element |
void clear() | 清空顺序表 |
boolean contains(Object o) | 判断 o 是否在线性表中 |
int indexOf(Object o) | 返回第一个 o 所在下标 |
int lastIndexOf(Object o) | 返回最后一个 o 的下标 |
List subList(int fromIndex, int toIndex) | 截取部分 list |
Loop traversal
foreach traversal
Iterator
System.out.println("======迭代器1========="); ElementObservableListDecorator<Object> list; Iterator<String> it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } System.out.println("======迭代器2========="); ListIterator<String> it2 = list.listIterator(); while (it2.hasNext()) { System.out.println(it2.next()); }
Perbezaan antara senarai jujukan dan tatasusunan:
Seperti yang dinyatakan di atas, lapisan bawah jadual jujukan boleh difahami sebagai tatasusunan, tetapi berbanding tatasusunan, ia lebih maju.
Jadual jujukan boleh berkembang dengan sendirinya;
Jadual jujukan dengan tegas membezakan antara kapasiti tatasusunan dan bilangan elemen.
Jadi tatasusunan sebenarnya ialah senarai jujukan yang tidak lengkap.
Perkara yang perlu diperhatikan dalam jadual jujukan:
Kita perlu membezakan antara dua konsep dalam jadual jujukan: kapasiti dan bilangan elemen (saiz).
Kapasiti boleh difahami sebagai saiz (panjang) tatasusunan, dan bilangan elemen ialah bilangan elemen sah yang direkodkan dalam saiz.
Dalam jadual jujukan, storan data perlu berterusan, dan tidak boleh ada "jurang" antara elemen Apabila operasi seperti sisipan dan pemadaman dilakukan, selepas operasi itu selesai, Pastikan kesinambungan senarai jujukan.
Atas ialah kandungan terperinci Bagaimana untuk menentukan dan melaksanakan ArrayList dan senarai jujukan dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!