Sumber artikel: Internet Penulis: PaleSting/CSDN
Pada artikel ini, kita akan melihat tipe data di Java, namun kami akan memperkenalkan konsep tipe data abstrak (ADT). Kita juga akan mempelajari beberapa ADT yang didefinisikan oleh Java dengan memperkenalkan Java Collections Framework.
ADT
ADT hanya ditentukan oleh tipe data yang dimilikinya dan operasi yang dapat dilakukan pada tipe data ini. Pengembang hanya dapat mengakses properti ADT melalui metode operasi ADT, dan mereka tidak akan mengetahui bagaimana berbagai operasi dalam tipe data ini diimplementasikan.
Di Java, kita sering menggunakan antarmuka untuk menyediakan serangkaian operasi tanpa mengungkapkan detail implementasi operasi tersebut. Ingatlah bahwa antarmuka mendefinisikan sekumpulan metode dan kelas Java harus mengimplementasikan set ini untuk memenuhi kondisi wajibnya atau mengimplementasikan instance antarmuka.
Tabel linier, tumpukan dan antrian
Ketika kita berbicara tentang ADT, kita sering berbicara tentang daftar linier, tumpukan, dan antrian. Kami tidak akan membahas detail struktur data ini, namun kami akan membahas mengapa disebut ADT.
Daftar linier adalah kumpulan elemen hingga yang disusun secara linier dan menyediakan akses langsung ke elemen-elemennya. Tumpukan adalah daftar linier terurut terakhir masuk pertama keluar (LIFO). Elemen ditambahkan ke dan dihapus dari kepala tumpukan. Antrian adalah daftar linier terurut pertama masuk pertama keluar, elemen ditambahkan dari akhir antrian dan diambil dari kepala antrian.
Struktur internal daftar linier, tumpukan, dan antrian dapat diimplementasikan dengan banyak cara. Misalnya, kita bisa menggunakan array terurut atau daftar tertaut untuk mengimplementasikan setiap struktur. Poin utamanya adalah bagaimana pun Anda mengimplementasikan struktur internalnya, antarmuka eksternalnya akan selalu tetap sama. Hal ini memungkinkan Anda untuk memodifikasi atau meningkatkan implementasi yang mendasarinya tanpa mengubah antarmuka publik.
Arsitektur koleksi Java
Kit Pengembangan Perangkat Lunak (SDK) Java 2 menyediakan kelas baru untuk mendukung ADT yang paling umum digunakan. Kelas-kelas ini disebut kelas koleksi Java (mirip dengan kelas koleksi di MFC), dan mereka bekerja sama untuk membentuk arsitektur koleksi Java. Arsitektur kumpulan ini menyediakan sekumpulan antarmuka dan kelas yang mewakili data yang disebut kumpulan data abstrak.
Antarmuka java.util.Collection digunakan untuk mewakili sekelompok objek, yaitu elemen. Antarmuka ini menyediakan operasi dasar seperti menambah, menghapus, dan menanyakan. Antarmuka Koleksi juga menyediakan metode iterator. Metode iterator mengembalikan sebuah instance dari antarmuka java.util.Iterator. Antarmuka Iterator menyediakan metode hasNext, next, dan delete. Dengan menggunakan metode yang disediakan oleh antarmuka Iterator, Anda dapat mengulang instance dalam objek Collection dari awal hingga akhir dan dengan aman menghapus elemen yang diwakili oleh iterator (kursor).
java.util.AbstractCollection adalah dasar untuk semua kelas arsitektur koleksi. Kelas AbstrakCollection menyediakan implementasi semua metode di antarmuka java.util.Collection kecuali metode iterator dan ukuran. Kedua metode pengecualian ini diterapkan oleh semua subkelas yang mewarisi java.util.AbstractCollection.
Kelas yang mengimplementasikan antarmuka harus menyediakan implementasi semua metode antarmuka. Karena beberapa metode antarmuka dalam arsitektur koleksi bersifat opsional, harus ada cara untuk memberi tahu pemanggil bahwa metode tertentu tidak diterapkan. Ketika metode opsional diterapkan dan metode ini tidak diterapkan, UnsupportedOperationException akan dilempar. Kelas UnsupportedOperationException mewarisi kelas RuntimeException. Hal ini memungkinkan pemanggil untuk memanggil semua operasi pengumpulan tanpa memasukkan setiap panggilan ke dalam pasangan coba-tangkap.
Daftar tabel linier
Antarmuka Daftar mewarisi antarmuka Koleksi dan mendefinisikan koleksi terurut yang memungkinkan adanya elemen identik. Antarmuka Daftar juga menambahkan metode yang menggunakan nilai indeks numerik untuk mengoperasikan elemen dalam Koleksi berdasarkan posisi elemen dalam daftar linier. Operasi ini meliputi penambahan, pengambilan, pengaturan, dan penghapusan.
Antarmuka Daftar juga menyediakan metode listIterator. Metode ini mengembalikan sebuah instance dari antarmuka java.util.ListIterator, yang memungkinkan Anda menelusuri daftar linier dari awal ke akhir atau dari ujung ke akhir. java.util.ListIterator mewarisi antarmuka java.util.Iterator. Oleh karena itu, mendukung penambahan dan modifikasi elemen dalam Koleksi yang diwakilinya.
Contoh berikut menunjukkan cara menelusuri elemen daftar dari belakang ke depan. Untuk mencapai hal ini, ListIterator harus diposisikan setelah elemen terakhir dari daftar sebelum traversal dimulai.
ListIterator iter = aList.listIterator(aList.size());
sementara (iter.hasPrevious())
Sistem.keluar.println(iter.previous().toString());
}
Arsitektur koleksi menyediakan dua implementasi antarmuka Daftar: LinkedList (daftar tertaut) dan ArrayList (daftar array, yaitu daftar statis). Kedua implementasi mendukung akses acak ke elemennya. Instance ArrayList mendukung operasi gaya array dan mendukung operasi pengubahan ukuran array. Sebuah instance dari LinkedList memberikan dukungan eksplisit untuk menambahkan, menghapus, dan menyediakan elemen di awal dan akhir daftar. Dengan menggunakan metode baru ini, seorang programmer cukup menggunakan LinedList sebagai tumpukan atau antrian, sebagai berikut:
LinkedList aQueue = LinkedList baru(aCollection);
aQueue.addFirst(newElement);
Objek anElement = aQueue.removeLast();
LinkedList aStack = LinkedList baru(aCollection);
aStack.addFirst(Elemen baru);
Objek anElement= aStack.removeFirst();
Cuplikan kode di Tabel A menunjukkan beberapa operasi umum pada contoh implementasi antarmuka java.util.List menggunakan java.util.ArrayList dan java.util.LinkedList. Operasi ini termasuk menambahkan elemen, mengakses elemen secara acak, dan menghapus elemen secara eksplisit dari akhir daftar.
Mengetahui apa yang terjadi dan tidak mengetahui alasannya adalah manfaat yang besar
ADT menyediakan alat yang ampuh untuk memisahkan operasi di antarmuka publik suatu objek dari implementasi konkritnya. Hal ini memungkinkan penerapan ADT untuk berubah dan berkembang sambil menjaga antarmuka publiknya tidak berubah. Arsitektur koleksi Java menyediakan sejumlah besar antarmuka dan implementasi yang mewakili kumpulan elemen dasar dan dapat digunakan untuk membuat ADT yang berguna.