Java - Struktur Data

Selamat datang, para pemrogram masa depan! Hari ini, kita akan masuk ke dunia menarik struktur data Java. Sebagai guru ilmu komputer yang ramah di lingkungan sekitar Anda, saya di sini untuk memandu Anda dalam perjalanan ini, langkah demi langkah. Jangan khawatir jika Anda baru belajar pemrograman – kita akan mulai dari dasar dan kemudian maju. Jadi, siapkan hardhat virtual Anda, dan mari kita mulai membangun pengetahuan kita!

Java - Data Structures

Pengenalan Struktur Data

Sebelum kita melompat ke struktur data Java tertentu, mari kita mengerti apa itu struktur data dan mengapa mereka penting.

Bayangkan Anda sedang mengatur sebuah perpustakaan. Anda tentu saja tidak akan melempar semua buku ke dalam satu puing, kan? Tentu saja tidak! Anda akan mengatur mereka dalam cara yang membuat mudah untuk ditemukan dan dikelola. Itu tepat apa yang dilakukan struktur data bagi data kita dalam pemrograman.

Struktur data adalah cara-cara mengatur dan menyimpan data sehingga kita dapat mengakses dan memodifikasinya secara efisien. Dalam Java, kita memiliki beberapa struktur data bawaan yang dapat digunakan, masing-masing dengan kekuatan dan kasus penggunaannya sendiri.

Struktur Data Bawaan Java

Bergabunglah dalam penjelajahan beberapa struktur data paling umum di Java:

Enumeration

Enumeration seperti mesin tiket yang memberikan nomor satu per satu. Itu adalah sebuah antarmuka di Java yang memungkinkan kita mengakses elemen dalam koleksi satu per satu.

Berikut adalah contoh sederhana:

import java.util.*;

public class EnumerationExample {
public static void main(String args[]) {
Vector<String> dayNames = new Vector<>();
dayNames.add("Senin");
dayNames.add("Selasa");
dayNames.add("Rabu");

Enumeration<String> days = dayNames.elements();

while (days.hasMoreElements()) {
System.out.println(days.nextElement());
}
}
}

Dalam contoh ini, kita membuat sebuah Vector dari nama-nama hari dan menggunakan Enumeration untuk mengiterasi mereka. Metode hasMoreElements() memeriksa jika ada elemen lain, dan nextElement() mengambil elemen berikutnya.

BitSet

BitSet seperti baris saklar cahaya – setiap saklar dapat dalam keadaan nyala (1) atau mati (0). Itu berguna saat Anda perlu menyimpan series nilai benar/salah secara efisien.

Berikut adalah contoh:

import java.util.BitSet;

public class BitSetExample {
public static void main(String args[]) {
BitSet bits1 = new BitSet(16);
BitSet bits2 = new BitSet(16);

// set beberapa bit
for(int i = 0; i < 16; i++) {
if((i % 2) == 0) bits1.set(i);
if((i % 5) != 0) bits2.set(i);
}

System.out.println("Pola awal dalam bits1: " + bits1);
System.out.println("Pola awal dalam bits2: " + bits2);

// AND bits
bits2.and(bits1);
System.out.println("bits2 AND bits1: " + bits2);
}
}

Contoh ini menunjukkan pembuatan BitSets, pengaturan bit, dan melakukan operasi bit.

Vector

Vector seperti array magis yang dapat tumbuh atau menyusut sesuai kebutuhan. Itu mirip dengan ArrayList tetapi disinkronkan, membuatnya aman untuk thread.

Berikut adalah bagaimana Anda mungkin menggunakan Vector:

import java.util.*;

public class VectorExample {
public static void main(String args[]) {
Vector<Integer> vec = new Vector<>(3, 2);
System.out.println("Ukuran awal: " + vec.size());
System.out.println("Kapasitas awal: " + vec.capacity());

vec.addElement(1);
vec.addElement(2);
vec.addElement(3);
vec.addElement(4);
System.out.println("Kapasitas setelah empat penambahan: " + vec.capacity());

vec.addElement(5);
System.out.println("Kapasitas saat ini: " + vec.capacity());

System.out.println("Elemen pertama: " + vec.firstElement());
System.out.println("Elemen terakhir: " + vec.lastElement());
}
}

Contoh ini menunjukkan bagaimana membuat Vector, menambahkan elemen, dan memeriksa ukurannya dan kapasitasnya.

Stack

Stack seperti tumpukan piring – Anda hanya dapat menambahkan atau menghapus dari puncak. Itu mengikuti prinsip Last-In-First-Out (LIFO).

mari lihat Stack dalam aksi:

import java.util.*;

public class StackExample {
public static void main(String args[]) {
Stack<String> stack = new Stack<>();
stack.push("Bawah");
stack.push("Tengah");
stack.push("Atas");

System.out.println("Stack: " + stack);
System.out.println("Dipop: " + stack.pop());
System.out.println("Stack setelah pop: " + stack);
System.out.println("Peak: " + stack.peek());
System.out.println("Stack setelah peak: " + stack);
}
}

Contoh ini menunjukkan menambahkan elemen ke stack, menghapus mereka, dan melihat elemen puncak.

Dictionary

Dictionary adalah kelas abstrak yang mewakili struktur data key-value. Itu seperti kamus nyata di mana setiap kata (key) memiliki definisi (value).

Meskipun Dictionary abstrak dan tidak dapat diinstansiasi langsung, subkelasHashtable biasanya digunakan:

import java.util.*;

public class DictionaryExample {
public static void main(String args[]) {
Dictionary<String, String> dict = new Hashtable<>();

dict.put("Apel", "buah");
dict.put("Java", "bahasa pemrograman");
dict.put("Komputer", "perangkat elektronik");

System.out.println("Dictionary: " + dict);
System.out.println("Nilai untuk key 'Java': " + dict.get("Java"));

System.out.println("Keys: ");
for (Enumeration<String> keys = dict.keys(); keys.hasMoreElements();) {
System.out.println(keys.nextElement());
}
}
}

Contoh ini menunjukkan bagaimana menggunakan Dictionary (melalui Hashtable) untuk menyimpan dan mengambil pasangan key-value.

Hashtable

Hashtable seperti lemari filing super efisien. Itu menyimpan pasangan key-value dan memungkinkan pengambilan nilai secara cepat berdasarkan key mereka.

Berikut adalah contoh penggunaan Hashtable:

import java.util.*;

public class HashtableExample {
public static void main(String args[]) {
Hashtable<String, Integer> numbers = new Hashtable<>();
numbers.put("satu", 1);
numbers.put("dua", 2);
numbers.put("tiga", 3);

System.out.println("Hashtable: " + numbers);
System.out.println("Nilai 'dua': " + numbers.get("dua"));
System.out.println("Apakah 'empat' adalah key? " + numbers.containsKey("empat"));
System.out.println("Apakah 3 adalah nilai? " + numbers.containsValue(3));

numbers.remove("dua");
System.out.println("Hashtable setelah menghapus 'dua': " + numbers);
}
}

Contoh ini menunjukkan menambahkan pasangan key-value ke Hashtable, mengambil nilai, memeriksa key dan nilai, dan menghapus entri.

Properties

Properties adalah jenis khusus Hashtable yang dirancang untuk menyimpan pasangan key-value string. Itu sering digunakan untuk pengaturan konfigurasi.

mari lihat bagaimana Properties bekerja:

import java.util.*;

public class PropertiesExample {
public static void main(String args[]) {
Properties capitals = new Properties();
capitals.put("USA", "Washington D.C.");
capitals.put("France", "Paris");
capitals.put("Japan", "Tokyo");

System.out.println("Properties: " + capitals);
System.out.println("Ibukota France: " + capitals.getProperty("France"));

// Set nilai default
System.out.println("Ibukota Spain: " + capitals.getProperty("Spain", "Tidak Ditemukan"));

capitals.list(System.out);
}
}

Contoh ini menunjukkan bagaimana menggunakan Properties untuk menyimpan dan mengambil pasangan key-value string, dengan nilai default untuk key yang hilang.

Kesimpulan

Selamat! Anda baru saja mengambil langkah pertama Anda ke dunia struktur data Java. Setiap struktur ini memiliki properti unik dan kasus penggunaan sendiri. Selama Anda terus melanjutkan perjalanan pemrograman Anda, Anda akan menemukan diri Anda mencari struktur yang berbeda tergantung pada kebutuhan khusus Anda.

Ingat, memilih struktur data yang tepat dapat membuat perbedaan besar dalam efisiensi program Anda. Itu seperti memilih alat yang tepat untuk pekerjaan – palu bagus untuk paku, tapi tidak begitu bagus untuk skru!

Terus latihan dengan struktur ini, cobalah menggunakannya dalam proyek Anda sendiri, dan jangan takut untuk mencoba. Selamat coding!

Credits: Image by storyset