Home » Java » Struktur Data Java: Penjelasan Lengkap dan Contoh

Struktur Data Java: Penjelasan Lengkap dan Contoh

by Bagus Dharma Iswara
by Bagus Dharma Iswara

Struktur data yang disediakan oleh paket utilitas Java sangat kuat dan menjalankan berbagai fungsi. Struktur data ini terdiri dari antarmuka dan kelas berikut

  1. Enumeration.
  2. BitSet.
  3. Vector.
  4. Stack.
  5. Dictionary.
  6. Hashtable.
  7. Properties.

1. Enumeration

Interface Enumeration itu sendiri bukanlah struktur data, tetapi sangat penting dalam konteks struktur data lainnya. Antarmuka Pencacahan mendefinisikan cara untuk mengambil elemen berturut-turut dari struktur data. Misalnya, Enumerasi mendefinisikan metode yang disebut nextElement yang digunakan untuk mendapatkan elemen berikutnya dalam struktur data yang berisi banyak elemen

Antarmuka lawas ini telah digantikan oleh Iterator. Meskipun tidak digunakan lagi, Pencacahan dianggap usang untuk kode baru. Namun, ini digunakan oleh beberapa metode yang ditentukan oleh kelas lama seperti Vektor dan Properti, digunakan oleh beberapa kelas API lainnya, dan saat ini digunakan secara luas dalam kode aplikasi.

Enum adalah “kelas” khusus yang mewakili sekelompok konstanta (variabel yang tidak dapat diubah, seperti variabel akhir). Untuk membuat enum, gunakan kata kunci enum (bukan class atau interface), dan pisahkan konstanta dengan koma. Perhatikan bahwa mereka harus menggunakan huruf besar. Enumeration interface mendefinisikan metode yang dengannya Anda dapat menghitung (memperoleh satu per satu) elemen dalam kumpulan objek.

Metode yang dideklarasi dengan Enumeration adalah

  1. boolean hasMoreElements( ) yaitu saat diimplementasikan, itu harus mengembalikan nilai true saat masih ada lebih banyak elemen untuk diekstrak, dan false ketika semua elemen telah disebutkan.
  2. Object nextElement( ) yaitu fungsi ini mengembalikan objek berikutnya dalam pencacahan sebagai referensi Objek generik.

Berikut ini merupakan contoh Enum pada java

import java.util.Vector;
import java.util.Enumeration;

public class EnumerationTester {

   public static void main(String args[]) {
      Enumeration days;
      Vector dayNames = new Vector();
      
      dayNames.add("Sunday");
      dayNames.add("Monday");
      dayNames.add("Tuesday");
      dayNames.add("Wednesday");
      dayNames.add("Thursday");
      dayNames.add("Friday");
      dayNames.add("Saturday");
      days = dayNames.elements();
      
      while (days.hasMoreElements()) {
         System.out.println(days.nextElement()); 
      }
   }
}

Kemudian akan menghasilkan output berikut

Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday

Contoh lain dari enum

enum Level {
  LOW,
  MEDIUM,
  HIGH
}

Kita dapat mengakses konstanta enum dengan sintaks dot, misalnya

Level myVar = Level.MEDIUM;

Enum Didalam Sebuah Kelas

Kita juga dapat memiliki enum dalam sebuah kelas

public class MyClass {
  enum Level {
    LOW,
    MEDIUM,
    HIGH
  }

  public static void main(String[] args) {
    Level myVar = Level.MEDIUM; 
    System.out.println(myVar);
  }
} //output yang akan muncul : MEDIUM

Enum dalam Statement Switch

Enum sering digunakan dalam pernyataan switch untuk memeriksa nilai yang sesuai, contohnya adalah

enum Level {
  LOW,
  MEDIUM,
  HIGH
}

public class MyClass {
  public static void main(String[] args) {
    Level myVar = Level.MEDIUM;

    switch(myVar) {
      case LOW:
        System.out.println("Low level");
        break;
      case MEDIUM:
         System.out.println("Medium level");
        break;
      case HIGH:
        System.out.println("High level");
        break;
    }
  }
} //output yang muncul adalah Medium level

Loop pada Enum

Jenis enum memiliki metode values (), yang mengembalikan larik dari semua konstanta enum. Metode ini berguna saat Anda ingin mengulang melalui konstanta enum:

for (Level myVar : Level.values()) {
  System.out.println(myVar);
} 

Untuk output yang muncul adalah

LOW
MEDIUM
HIGH

Perbedaan Enum dan Kelas

Enum bisa, seperti kelas, memiliki atribut dan metode. Satu-satunya perbedaan adalah konstanta enum bersifat publik, statis, dan final (tidak dapat diubah – tidak dapat diganti).

Enum tidak dapat digunakan untuk membuat objek, dan tidak dapat memperluas kelas lain (tetapi dapat mengimplementasikan antarmuka). Gunakan enum saat Anda memiliki nilai yang Anda tahu tidak akan berubah, seperti hari bulan, hari, warna, setumpuk kartu.

2. BitSet

Kelas BitSet mengimplementasikan sekelompok bit atau flag yang dapat diatur dan dihapus secara individual. Kelas ini sangat berguna dalam kasus di mana Anda perlu mengikuti sekumpulan nilai Boolean; Anda cukup menetapkan sedikit untuk setiap nilai dan mengatur atau menghapusnya sebagaimana mestinya.

Kelas BitSet membuat tipe array khusus yang menyimpan nilai bit. Array BitSet dapat bertambah besar sesuai kebutuhan. Ini membuatnya mirip dengan vektor bit. Ini adalah kelas lama tetapi telah sepenuhnya direkayasa ulang di Java 2, versi 1.4. BitSet mendefinisikan dua konstruktor berikut

  1. BitSet( ) yaitu Konstruktor ini membuat objek default.
  2. BitSet(int size) yaitu Konstruktor ini memungkinkan Anda untuk menentukan ukuran awalnya, yaitu jumlah bit yang dapat ditampungnya. Semua bit diinisialisasi ke nol.

BitSet mengimplementasikan interface Cloneable dan menetapkan metode yang tercantum dalam jenis berikut

  1. void and(BitSet bitSet) yaitu AND’s konten objek BitSet yang memanggil dengan yang ditentukan oleh bitSet. Hasilnya ditempatkan ke objek pemanggilan.
  2. void andNot(BitSet bitSet) yaitu Untuk setiap 1 bit di bitSet, bit yang sesuai dalam BitSet pemohon akan dihapus.
  3. int cardinality( ) yaitu Mengembalikan jumlah bit set dalam objek pemanggilan.
  4. void clear( ) yaitu membuat 0 seluruh bit.
  5. void clear(int index) yaitu Nolkan bit yang ditentukan oleh indeks.
  6. void clear(int startIndex, int endIndex) yaitu Menurunkan bit dari startIndex ke endIndex.
  7. Object clone( ) yaitu Menduplikasi objek BitSet yang memanggil.
  8. boolean equals(Object bitSet) yaitu Mengembalikan nilai benar jika kumpulan bit pemanggilan setara dengan yang diteruskan di bitSet. Jika tidak, metode ini mengembalikan nilai salah.
  9. void flip(int index) yaitu Membalik bit yang ditentukan oleh indeks.
  10. void flip(int startIndex, int endIndex) yaitu Membalik bit dari startIndex ke endIndex.
  11. boolean get(int index) yaitu Mengembalikan status bit saat ini pada indeks yang ditentukan.
  12. BitSet get(int startIndex, int endIndex) yaitu Mengembalikan BitSet yang terdiri dari bit-bit dari startIndex ke endIndex. Objek pemanggilan tidak berubah.
  13. int hashCode( ) yaitu Mengembalikan kode hash untuk objek pemanggilan.
  14. boolean intersects(BitSet bitSet) yaitu Mengembalikan nilai true jika setidaknya satu pasang bit yang sesuai dalam objek pemanggilan dan bitSet adalah 1.
  15. boolean isEmpty( ) yaitu Mengembalikan nilai true jika semua bit dalam objek pemanggilan adalah nol.
  16. int length( ) yaitu Mengembalikan jumlah bit yang diperlukan untuk menampung konten dari BitSet yang memanggil. Nilai ini ditentukan oleh lokasi 1 bit terakhir.
  17. int nextClearBit(int startIndex) yaitu Mengembalikan indeks dari bit berikutnya yang dibersihkan, (yaitu, bit nol berikutnya), dimulai dari indeks yang ditentukan oleh startIndex.
  18. int nextSetBit(int startIndex) yaitu Mengembalikan indeks dari set bit berikutnya (yaitu, 1 bit berikutnya), mulai dari indeks yang ditentukan oleh startIndex. Jika tidak ada bit yang disetel, -1 dikembalikan.
  19. void or(BitSet bitSet) yaitu OR konten dari objek BitSet yang memanggil dengan yang ditentukan oleh bitSet. Hasilnya ditempatkan ke objek pemanggilan.
  20. void set(int index) yaitu Menyetel bit yang ditentukan oleh indeks.
  21. void set(int index, boolean v) yaitu Menetapkan bit yang ditentukan oleh indeks ke nilai yang diteruskan di v. True menyetel bit, false menghapus bit.
  22. void set(int startIndex, int endIndex) yaitu Set bit dari startIndex ke endIndex.
  23. void set(int startIndex, int endIndex, boolean v) yaitu Set bit dari startIndex ke endIndex, ke nilai yang diteruskan dalam v. True set bit, false membersihkan bit.
  24. int size( ) yaitu Mengembalikan jumlah bit dalam objek BitSet yang memanggil.
  25. String toString( ) yaitu Mengembalikan string yang setara dengan objek BitSet yang memanggil.
  26. void xor(BitSet bitSet) yaitu XOR konten dari objek BitSet yang memanggil dengan yang ditentukan oleh bitSet. Hasilnya ditempatkan ke objek pemanggilan.

Contoh BitSet Java

Program berikut menggambarkan beberapa metode yang didukung oleh struktur data ini

import java.util.BitSet;
public class BitSetDemo {

  public static void main(String args[]) {
      BitSet bits1 = new BitSet(16);
      BitSet bits2 = new BitSet(16);
      
      // set some bits
      for(int i = 0; i < 16; i++) {
         if((i % 2) == 0) bits1.set(i);
         if((i % 5) != 0) bits2.set(i);
      }
     
      System.out.println("Initial pattern in bits1: ");
      System.out.println(bits1);
      System.out.println("\nInitial pattern in bits2: ");
      System.out.println(bits2);

      // AND bits
      bits2.and(bits1);
      System.out.println("\nbits2 AND bits1: ");
      System.out.println(bits2);

      // OR bits
      bits2.or(bits1);
      System.out.println("\nbits2 OR bits1: ");
      System.out.println(bits2);

      // XOR bits
      bits2.xor(bits1);
      System.out.println("\nbits2 XOR bits1: ");
      System.out.println(bits2);
   }
}

Output yang akan dihasilkan adalah

Initial pattern in bits1:
{0, 2, 4, 6, 8, 10, 12, 14}

Initial pattern in bits2:
{1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}

bits2 AND bits1:
{2, 4, 6, 8, 12, 14}

bits2 OR bits1:
{0, 2, 4, 6, 8, 10, 12, 14}

bits2 XOR bits1:
{}

3. Vector

Kelas Vector mirip dengan larik Java tradisional, kecuali bahwa kelas itu dapat berkembang seperlunya untuk mengakomodasi elemen baru. Seperti sebuah array, elemen dari sebuah objek Vektor dapat diakses melalui indeks ke dalam vektor. Hal yang menyenangkan tentang menggunakan kelas Vector adalah Anda tidak perlu khawatir tentang menyetelnya ke ukuran tertentu saat pembuatan; itu menyusut dan tumbuh secara otomatis bila perlu.

Vektor mengimplementasikan array dinamis. Ini mirip dengan ArrayList, tetapi dengan dua perbedaan

  1. Vektor disinkronkan.
  2. Vektor berisi banyak metode lama yang bukan merupakan bagian dari kerangka koleksi.

Vektor terbukti sangat berguna jika Anda tidak mengetahui ukuran larik terlebih dahulu atau Anda hanya memerlukan satu yang dapat mengubah ukuran selama masa program.

Berikut adalah daftar konstruktor yang disediakan oleh kelas vektor.

  • Vector( ) yaitu Konstruktor ini membuat vektor default, yang memiliki ukuran awal 10.
  • Vector(int size) yaitu Konstruktor ini menerima argumen yang sama dengan ukuran yang diperlukan, dan membuat vektor yang kapasitas awalnya ditentukan berdasarkan ukuran.
  • Vector(int size, int incr) yaitu Konstruktor ini membuat vektor yang kapasitas awalnya ditentukan oleh ukuran dan yang kenaikannya ditentukan dengan incr. Kenaikan menentukan jumlah elemen yang akan dialokasikan setiap kali vektor diubah ukurannya ke atas.
  • Vector(Collection c) yaitu Konstruktor ini membuat vektor yang berisi elemen Collection c.

4. Stack

Kelas Stack mengimplementasikan tumpukan elemen terakhir masuk pertama keluar (LIFO). Anda dapat menganggap tumpukan secara harfiah sebagai tumpukan objek vertikal; ketika Anda menambahkan elemen baru, itu akan ditumpuk di atas yang lain. Saat Anda menarik elemen dari tumpukan, elemen tersebut akan terlepas dari atas. Dengan kata lain, elemen terakhir yang Anda tambahkan ke tumpukan adalah yang pertama keluar.

Stack adalah subclass dari Vector yang mengimplementasikan tumpukan standar terakhir masuk, keluar pertama. Stack hanya mendefinisikan konstruktor default, yang membuat tumpukan kosong. Stack menyertakan semua metode yang ditentukan oleh Vector, dan menambahkan beberapa metode miliknya sendiri. dapat dibuat dengan menulis Stack().

Terlepas dari metode yang diwarisi dari kelas induknya Vector, Stack mendefinisikan metode berikut

  • boolean empty() yaitu Menguji apakah tumpukan ini kosong. Mengembalikan nilai benar jika tumpukan kosong, dan mengembalikan nilai salah jika tumpukan berisi elemen.
  • Object peek( ) yaitu Mengembalikan elemen di atas tumpukan, tetapi tidak menghapusnya.
  • Object pop( ) yaitu Mengembalikan elemen di atas tumpukan, menghapusnya dalam proses.
  • Object push(Object element) yaitu Mendorong elemen ke tumpukan. Elemen juga dikembalikan.
  • int search(Object element) yaitu Mencari elemen dalam tumpukan. Jika ditemukan, offsetnya dari atas tumpukan akan dikembalikan. Jika tidak, -1 dikembalikan.

Contoh dari Vector dalam Java adalah

import java.util.*;
public class StackDemo {

   static void showpush(Stack st, int a) {
      st.push(new Integer(a));
      System.out.println("push(" + a + ")");
      System.out.println("stack: " + st);
   }

   static void showpop(Stack st) {
      System.out.print("pop -> ");
      Integer a = (Integer) st.pop();
      System.out.println(a);
      System.out.println("stack: " + st);
   }

   public static void main(String args[]) {
      Stack st = new Stack();
      System.out.println("stack: " + st);
      showpush(st, 42);
      showpush(st, 66);
      showpush(st, 99);
      showpop(st);
      showpop(st);
      showpop(st);
      try {
         showpop(st);
      } catch (EmptyStackException e) {
         System.out.println("empty stack");
      }
   }
}

Kemudian akan menghasilkan output berikut

stack: [ ]
push(42)
stack: [42]
push(66)
stack: [42, 66]
push(99)
stack: [42, 66, 99]
pop -> 99
stack: [42, 66]
pop -> 66
stack: [42]
pop -> 42
stack: [ ]
pop -> empty stack

5. Dictionary

Kelas Dictionary adalah kelas abstrak yang mendefinisikan struktur data untuk memetakan kunci ke nilai. Ini berguna jika Anda ingin dapat mengakses data melalui kunci tertentu daripada indeks integer. Karena kelas Dictionary bersifat abstrak, ia hanya menyediakan kerangka kerja untuk struktur data yang dipetakan kunci daripada implementasi tertentu.

Dictionary adalah kelas abstrak yang mewakili repositori penyimpanan kunci / nilai dan beroperasi seperti Map. Diberikan kunci dan nilai, Anda bisa menyimpan nilai dalam objek Dictionary. Setelah nilai disimpan, Anda dapat mengambilnya kembali dengan menggunakan kuncinya. Jadi, seperti peta, kamus dapat dianggap sebagai daftar pasangan kunci / nilai. Metode abstrak yang ditentukan oleh dictionary tercantum di bawah ini

  • Enumeration elements( ) yaitu Mengembalikan enumerasi dari nilai-nilai yang terkandung dalam kamus.
  • Object get(Object key) yaitu Mengembalikan objek yang berisi nilai yang terkait dengan kunci. Jika kuncinya tidak ada dalam dictionary, objek null dikembalikan.
  • boolean isEmpty( ) yaitu Mengembalikan nilai benar jika dictionary kosong, dan mengembalikan nilai salah jika mengandung setidaknya satu kunci.
  • Enumeration keys( ) yaitu Mengembalikan enumerasi kunci yang terdapat dalam dictionary.
  • Object put(Object key, Object value) yaitu Menyisipkan kunci dan nilainya ke dalam dictionary. Mengembalikan null jika kunci belum ada di dictionary; mengembalikan nilai sebelumnya yang terkait dengan kunci jika kunci tersebut sudah ada dalam dictionary.
  • Object remove(Object key) yaitu Menghapus kunci dan nilainya. Mengembalikan nilai yang terkait dengan kunci. Jika kuncinya tidak ada dalam dictionary, null dikembalikan.
  • int size( ) yaitu Mengembalikan jumlah entri dalam dictionary.

Kelas dictionarysudah usang. Anda harus menerapkan interface Map untuk mendapatkan fungsionalitas penyimpanan kunci / nilai.

6. Hashtable

Kelas Hashtable menyediakan sarana untuk mengatur data berdasarkan beberapa struktur kunci yang ditentukan pengguna. Misalnya, dalam tabel hash daftar alamat Anda bisa menyimpan dan mengurutkan data berdasarkan kunci seperti kode pos daripada nama orang. Arti khusus dari kunci yang berkaitan dengan tabel hash sepenuhnya bergantung pada penggunaan tabel hash dan data yang dikandungnya.

Hashtable adalah bagian dari java.util asli dan merupakan implementasi konkret dari Kamus. Namun, Java 2 merekayasa ulang Hashtable sehingga ia juga mengimplementasikan antarmuka Peta. Dengan demikian, Hashtable sekarang diintegrasikan ke dalam kerangka koleksi. Ini mirip dengan HashMap, tetapi disinkronkan.

Seperti HashMap, Hashtable menyimpan pasangan kunci / nilai dalam tabel hash. Saat menggunakan Hashtable, Anda menentukan objek yang digunakan sebagai kunci, dan nilai yang ingin Anda tautkan ke kunci tersebut. Kuncinya kemudian di-hash, dan kode hash yang dihasilkan digunakan sebagai indeks tempat nilai disimpan di dalam tabel.

Berikut adalah daftar konstruktor yang disediakan oleh kelas HashTable

  • Hashtable( ) yaitu Ini adalah konstruktor default dari tabel hash yang dibuatnya untuk kelas Hashtable.
  • Hashtable(int size) yaitu Konstruktor ini menerima parameter integer dan membuat tabel hash yang memiliki ukuran awal yang ditentukan oleh ukuran nilai integer.
  • Hashtable(int size, float fillRatio) yaitu Ini membuat tabel hash yang memiliki ukuran awal yang ditentukan oleh ukuran dan rasio isian yang ditentukan oleh fillRatio. Rasio ini harus antara 0,0 dan 1,0, dan ini menentukan seberapa penuh tabel hash sebelum diubah ukurannya ke atas.
  • Hashtable(Map < ? extends K, ? extends V > t) yaitu Ini membangun Hashtable dengan pemetaan yang diberikan.

Contoh program Hashtable pada Java

import java.util.*;
public class HashTableDemo {

   public static void main(String args[]) {
      // Create a hash map
      Hashtable balance = new Hashtable();
      Enumeration names;
      String str;
      double bal;

      balance.put("Zara", new Double(3434.34));
      balance.put("Mahnaz", new Double(123.22));
      balance.put("Ayan", new Double(1378.00));
      balance.put("Daisy", new Double(99.22));
      balance.put("Qadir", new Double(-19.08));

      // Show all balances in hash table.
      names = balance.keys();
      
      while(names.hasMoreElements()) {
         str = (String) names.nextElement();
         System.out.println(str + ": " + balance.get(str));
      }        
      System.out.println();
      
      // Deposit 1,000 into Zara's account
      bal = ((Double)balance.get("Zara")).doubleValue();
      balance.put("Zara", new Double(bal + 1000));
      System.out.println("Zara's new balance: " + balance.get("Zara"));
   }
}

Kemudian akan menghasilkan output

Qadir: -19.08
Zara: 3434.34
Mahnaz: 123.22
Daisy: 99.22
Ayan: 1378.0

Zara's new balance: 4434.34

7. Properties

Properti adalah subclass dari Hashtable. Ini digunakan untuk memelihara daftar nilai di mana kuncinya adalah String dan nilainya juga String. Kelas Properties digunakan oleh banyak kelas Java lainnya. Misalnya, ini adalah tipe objek yang dikembalikan oleh System.getProperties () saat mendapatkan nilai lingkungan.

Properti adalah subclass dari Hashtable. Ini digunakan untuk memelihara daftar nilai di mana kuncinya adalah String dan nilainya juga String. Kelas Properties digunakan oleh banyak kelas Java lainnya. Misalnya, ini adalah tipe objek yang dikembalikan oleh System.getProperties () saat mendapatkan nilai lingkungan. Properti menentukan variabel contoh berikut. Variabel ini menyimpan daftar properti default yang terkait dengan objek Properti. Kode membuat Properties adalah Properties defaults;

Berikut adalah daftar konstruktor yang disediakan oleh kelas properti

  • Properties( ) yaitu Konstruktor ini membuat objek Properti yang tidak memiliki nilai default.
  • Properties(Properties propDefault) yaitu Membuat objek yang menggunakan propDefault sebagai nilai defaultnya. Dalam kedua kasus tersebut, daftar properti kosong.

Contoh Properties pada Java

import java.util.*;
public class PropDemo {

   public static void main(String args[]) {
      Properties capitals = new Properties();
      Set states;
      String str;
      
      capitals.put("Illinois", "Springfield");
      capitals.put("Missouri", "Jefferson City");
      capitals.put("Washington", "Olympia");
      capitals.put("California", "Sacramento");
      capitals.put("Indiana", "Indianapolis");

      // Show all states and capitals in hashtable.
      states = capitals.keySet();   // get set-view of keys
      Iterator itr = states.iterator();
      
      while(itr.hasNext()) {
         str = (String) itr.next();
         System.out.println("The capital of " + str + " is " + 
            capitals.getProperty(str) + ".");
      }     
      System.out.println();

      // look for state not in list -- specify default
      str = capitals.getProperty("Florida", "Not Found");
      System.out.println("The capital of Florida is " + str + ".");
   }
}

Selanjutnya akan menghasilkan output

The capital of Missouri is Jefferson City.
The capital of Illinois is Springfield.
The capital of Indiana is Indianapolis.
The capital of California is Sacramento.
The capital of Washington is Olympia.

The capital of Florida is Not Found.

You may also like