Java - Data Structures

Selamat datang, para programer masa depan! Hari ini, kita akan melihat dunia yang menarik dari struktur data Java. Sebagai guru ilmu komputer yang ramah di lingkungan sekitar Anda, saya di sini untuk mengorbit Anda dalam perjalanan ini, langkah demi langkah. Jangan khawatir jika Anda baru dalam programming - kita akan mulai dari dasar dan naik tingkat per tingkat. Jadi, ambil hardhat virtual Anda, dan mari kita membangun pengetahuan kita!

Java - Data Structures

Pengenalan ke Struktur Data

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

Imaginasi Anda sedang mengatur perpustakaan. Anda tidak akan melempar semua buku ke dalam satu gumpalan, kan? Tentu saja tidak! Anda akan mengatur mereka dalam cara yang mudah untuk ditemukan dan dikelola. Itu persis apa yang dilakukan struktur data untuk data kita dalam programming.

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

Struktur Data Bawaan Java

Mari kita jelajahi beberapa struktur data paling umum di Java:

Enumeration

Enumeration seperti mesin tiket yang memberikan angka satu per satu. Itu adalah antarmuka di Java yang mengizinkan 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("Monday");
dayNames.add("Tuesday");
dayNames.add("Wednesday");

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

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

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

BitSet

BitSet seperti baris saklar cahaya - setiap saklar bisa dalam posisi nyala (1) atau mati (0). Itu berguna saat Anda perlu menyimpan serangkaian 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 di bits1: " + bits1);
System.out.println("Pola awal di bits2: " + bits2);

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

Contoh ini menunjukkan pembuatan BitSets, pengaturan bits, dan melakukan operasi bitwise.

Vector

Vector seperti array sihir yang bisa tumbuh atau menyusut sesuai kebutuhan. Itu mirip dengan ArrayList tetapi bersinkronisasi, 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 ukuran dan kapasitasnya.

Stack

Stack seperti tumpukan piring - Anda hanya bisa menambahkan atau menghapus dari puncaknya. 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("Bottom");
stack.push("Middle");
stack.push("Top");

System.out.println("Stack: " + stack);
System.out.println("Dikeluarkan: " + 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, mengeluarkan mereka, dan melihat elemen puncak.

Dictionary

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

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

import java.util.*;

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

dict.put("Apple", "buah");
dict.put("Java", "bahasa pemrograman");
dict.put("Computer", "perangkat elektronik");

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

System.out.println("Kunci: ");
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 kunci-nilai.

Hashtable

Hashtable seperti lemari filing yang super efisien. Itu menyimpan pasangan kunci-nilai dan mengizinkan pengambilan nilai secara cepat berdasarkan kunci 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("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);

System.out.println("Hashtable: " + numbers);
System.out.println("Nilai 'two': " + numbers.get("two"));
System.out.println("Adakah 'four' sebagai kunci? " + numbers.containsKey("four"));
System.out.println("Adakah 3 sebagai nilai? " + numbers.containsValue(3));

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

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

Properties

Properties adalah jenis khusus Hashtable yang dirancang untuk menyimpan pasangan kunci-nilai 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 kunci-nilai string, dengan nilai default untuk kunci yang hilang.

Kesimpulan

Selamat! Anda baru saja mengambil langkah pertama Anda ke dalam dunia struktur data Java. Setiap struktur ini memiliki properti dan kasus penggunaan unik. 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 bisa membuat perbedaan besar dalam efisiensi program Anda. Itu seperti memilih alat yang tepat untuk pekerjaan - palu sangat baik untuk paku, tapi tidak begitu baik untuk screw!

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

Credits: Image by storyset