Skip to main content

Mengenal Hierarki Java Collections Framework: Struktur, Keterkaitan, dan Implementasinya


Java Collections Framework adalah fondasi penting bagi setiap programmer Java yang ingin bekerja dengan kumpulan data secara efisien. Framework ini menyediakan berbagai antarmuka dan kelas yang memungkinkan kita untuk menyimpan, memanipulasi, dan mengatur data dengan cara yang terstruktur dan fleksibel. Mulai dari ArrayList yang umum digunakan, hingga koleksi yang lebih kompleks seperti HashMap, TreeSet, dan ConcurrentHashMap, setiap struktur data memiliki kelebihan dan kegunaannya masing-masing.

Artikel ini akan membawa Anda menjelajahi hierarki lengkap dari Java Collections Framework, memahami keterkaitan antara List, Set, dan Map, serta menyoroti implementasi turunan seperti LinkedList, HashSet, dan TreeMap. Dengan memahami struktur dan hubungan di antara koleksi ini, Anda akan lebih siap dalam memilih jenis koleksi yang tepat untuk kebutuhan pengembangan Anda.

Mari kita mulai dengan mempelajari bagaimana elemen-elemen penting ini terhubung satu sama lain dan peran mereka dalam pengembangan aplikasi Java yang efektif.

Mari Mulai dari Mengenal Array

Mari kita membahas array di awal artikel karena penulis rasa sangat relevan, relevan karena array adalah struktur data dasar yang digunakan di Java dan konsep dasarnya membantu programmer memahami latar belakang koleksi yang lebih kompleks dalam Java Collections Framework. Mulai dari array akan memberikan fondasi kuat dan menjelaskan mengapa koleksi seperti ArrayList, HashSet, dan HashMap dikembangkan untuk mengatasi keterbatasan array. 

Pendahuluan tentang Array

Apa Itu Array dalam Java?

Array dalam Java adalah struktur data yang digunakan untuk menyimpan sejumlah elemen dengan tipe data yang sama dalam satu variabel. Elemen-elemen array disimpan secara berurutan dalam memori, dan setiap elemen dapat diakses dengan menggunakan indeks. Array memiliki ukuran tetap, yang berarti jumlah elemen yang dapat disimpan sudah ditentukan saat array dibuat dan tidak dapat diubah setelahnya.

Cara Mendefinisikan Array

Untuk mendefinisikan array dalam Java, ada dua langkah utama yang harus dilakukan:

  1. Deklarasi array: Menentukan tipe data elemen array dan memberi nama array.
  2. Inisialisasi array: Mengalokasikan memori untuk array dan mengisi nilai-nilainya.

Contoh Mendefinisikan Array

Deklarasi dan Inisialisasi Array dalam Satu Langkah: Anda dapat mendeklarasikan dan menginisialisasi array pada saat yang sama dengan menggunakan tanda kurung siku ([]).

System.out.printf("Learning about Array!");
int[] numbers = {1,3,5,7,9};
for (int i = 0 ; i < numbers.length; i++) {
System.out.println(numbers[i]);
}

atau di loop sbb:

System.out.printf("Learning about Array!");
int[] numbers = {1,3,5,7,9};
for (int number : numbers) {
System.out.println(number);
}

Contoh Deklarasi dan Alokasi Memori Terpisah Pada Array 

Anda dapat mendeklarasikan array terlebih dahulu dan kemudian mengalokasikan memori untuk array dengan menggunakan kata kunci new.

System.out.printf("Learning about Array!");
int[] numbers;
numbers = new int[]{1,3,5,7,9,10};
for (int number : numbers) {
System.out.println(number);
}

Atau seperti ini.

System.out.printf("Learning about Array!");
int[] numbers;
numbers = new int[6];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
numbers[5] = 6;
for (int number : numbers) {
System.out.println(number);
}


Cara Kerja Array dalam Java

Indeks Array: Setiap elemen dalam array diidentifikasi dengan indeks. Indeks array dimulai dari 0 (bukan 1), yang berarti elemen pertama array memiliki indeks 0, elemen kedua memiliki indeks 1, dan seterusnya.

System.out.printf("Learning about Array!");
int[] numbers = {10, 20, 30, 40, 50};
System.out.println(numbers[0]); // Output: 10
System.out.println(numbers[3]); // Output: 40
Di sini, numbers[0] mengakses elemen pertama (10) dan numbers[3] mengakses elemen keempat (40).

Ukuran Array: Array di Java memiliki ukuran tetap, yang berarti jumlah elemen dalam array ditentukan saat deklarasi dan tidak bisa diubah setelahnya. Untuk mengetahui ukuran array, Anda bisa menggunakan properti length.

System.out.printf("Learning about Array!");
int[] numbers = {10, 20, 30, 40, 50};
numbers[1] = 25; // Mengubah nilai elemen kedua (20) menjadi 25
System.out.println(numbers[1]); // Output: 25

Array Multidimensi: Array juga dapat memiliki lebih dari satu dimensi, misalnya array 2D, yang sering digunakan untuk menyimpan data dalam bentuk tabel atau matriks.

System.out.printf("Learning about Array!");
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println(matrix[1][2]); // Output: 6

Di sini, matrix adalah array 2D yang menyimpan angka dalam bentuk baris dan kolom. matrix[1][2] mengakses elemen pada baris kedua dan kolom ketiga, yaitu angka 6.

Keterbatasan Array dalam Java

  • Ukuran Tetap: Setelah ukuran array ditentukan saat pembuatan, ukuran tersebut tidak dapat diubah. Jika Anda perlu menambah atau mengurangi elemen setelahnya, Anda harus membuat array baru dengan ukuran yang lebih besar atau lebih kecil.

  • Tidak Fleksibel: Array tidak mendukung fitur dinamis seperti penambahan atau penghapusan elemen dengan mudah. Untuk operasi seperti itu, Java menyediakan koleksi seperti ArrayList, yang lebih fleksibel.

Kesimpulan Pembahasa Array

Array adalah struktur data dasar yang sangat berguna di Java untuk menyimpan elemen-elemen yang memiliki tipe data yang sama. Meskipun array memiliki beberapa keterbatasan, seperti ukuran tetap dan kurangnya fleksibilitas, konsep dasar array sangat penting untuk memahami struktur data lainnya dalam Java, terutama dalam konteks Java Collections Framework yang lebih canggih.

Java Collections Framework

Setelah memahami apa itu array dalam Java dan mengenali kekuatan serta keterbatasannya, penting bagi seorang programmer untuk mengetahui solusi yang lebih fleksibel dan dinamis dalam menangani kumpulan data. Di sinilah Java Collections Framework berperan. Framework ini dirancang untuk mengatasi keterbatasan array, seperti ukuran tetap dan kurangnya fitur untuk manipulasi data yang lebih kompleks.

Java Collections Framework menyediakan berbagai struktur data yang mendukung penambahan, penghapusan, dan pengelolaan elemen secara efisien. Dengan berbagai antarmuka dan implementasi seperti List, Set, dan Map, programmer memiliki alat yang lebih canggih untuk menyimpan dan mengatur data. Framework ini memungkinkan pengelolaan koleksi data dengan fitur-fitur yang lebih kaya, seperti ukuran dinamis, kemampuan untuk menghindari duplikasi elemen, serta pengurutan elemen secara otomatis.

Pada bagian ini, kita akan menjelajahi hierarki Java Collections Framework, menjelaskan hubungan antara antarmuka dan implementasi seperti ArrayList, HashSet, HashMap, dan lainnya. Pemahaman yang baik tentang hierarki ini akan membantu programmer memilih struktur data yang tepat untuk berbagai kebutuhan dalam pengembangan aplikasi.

Mari kita lihat bagaimana Java Collections Framework dapat menjadi solusi optimal untuk menghadapi keterbatasan array dan bagaimana setiap elemen dalam framework ini memiliki perannya masing-masing.

Hierarki Java Collections Framework

Java Collections Framework adalah kumpulan antarmuka dan kelas yang dirancang untuk menyimpan dan memproses kumpulan objek secara efisien. Framework ini dibagi menjadi beberapa antarmuka utama, yaitu Collection dan Map. Berikut adalah penjelasan tentang antarmuka-antarmuka kunci dalam hierarki:

  • Collection: Antarmuka dasar yang mewakili sekelompok objek, dikenal sebagai elemen. Sub-antarmuka dari Collection mencakup List, Set, dan Queue.
  • Map: Antarmuka terpisah yang memetakan kunci unik ke nilai-nilai yang sesuai, tanpa mewarisi Collection.

Antarmuka List dan Implementasinya

  • List: Struktur data yang memungkinkan penyimpanan elemen-elemen berurutan yang dapat diakses berdasarkan indeks. Elemen dalam List bisa diduplikasi.
    • Implementasi populer:
      • ArrayList: Implementasi berbasis array yang fleksibel dan mendukung akses elemen cepat. Ideal untuk kasus di mana operasi pembacaan lebih umum dibandingkan penyisipan atau penghapusan elemen di tengah-tengah.
      • LinkedList: Implementasi berbasis daftar berantai yang cocok untuk operasi penyisipan dan penghapusan elemen yang lebih sering.
      • Vector: Mirip dengan ArrayList tetapi bersifat thread-safe, sehingga cocok untuk lingkungan multithreading meskipun penggunaannya sekarang jarang karena performa yang lebih lambat dibanding ArrayList.

Antarmuka Set dan Implementasinya

  • Set: Struktur data yang tidak mengizinkan elemen duplikat.
    • Implementasi populer:
      • HashSet: Implementasi berbasis HashMap yang menawarkan waktu akses cepat tetapi tidak menjamin urutan elemen.
      • LinkedHashSet: Seperti HashSet, tetapi mempertahankan urutan elemen saat ditambahkan.
      • TreeSet: Implementasi berbasis pohon yang menyimpan elemen dalam urutan alami atau urutan yang ditentukan oleh Comparator.

Antarmuka Map dan Implementasinya

  • Map: Antarmuka yang memetakan kunci ke nilai dan tidak mengizinkan kunci duplikat.
    • Implementasi populer:
      • HashMap: Implementasi berbasis hash table yang mendukung penyimpanan pasangan kunci-nilai dan menawarkan waktu pencarian yang cepat.
      • LinkedHashMap: Mempertahankan urutan elemen berdasarkan saat elemen dimasukkan, sambil tetap mempertahankan kecepatan HashMap.
      • TreeMap: Implementasi berbasis pohon yang menyimpan pasangan kunci-nilai dalam urutan alami kunci atau berdasarkan Comparator.
      • ConcurrentHashMap: Implementasi thread-safe yang memungkinkan operasi serentak dan aman di lingkungan multithread.

Antarmuka Queue dan Implementasinya

  • Queue: Struktur data yang mengikuti prinsip First-In-First-Out (FIFO) atau Last-In-First-Out (LIFO) untuk Deque.
    • Implementasi populer:
      • PriorityQueue: Mengatur elemen berdasarkan urutan prioritas alih-alih urutan penambahan.
      • ArrayDeque: Implementasi antrian berkapasitas dinamis yang lebih efisien daripada LinkedList untuk digunakan sebagai Queue dan Deque.

Contoh Penggunaan Koleksi dalam Java

Untuk memahami bagaimana menggunakan koleksi, berikut contoh sederhana penggunaan ArrayList:

ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Melon");

// Menampilkan semua elemen dalam ArrayList
for (String fruit : fruits) {
System.out.println(fruit);
}


Kesimpulan Java Collection

Memahami hierarki dan implementasi dari Java Collections Framework sangat penting untuk setiap programmer yang ingin membuat aplikasi yang efisien dan mudah dikelola. Dengan memahami perbedaan dan keunggulan masing-masing antarmuka serta implementasinya, programmer dapat memilih struktur data yang paling sesuai dengan kebutuhan spesifik proyek mereka.

Artikel ini mencakup gambaran umum dan contoh implementasi untuk membantu Anda memahami bagaimana mengatasi keterbatasan array dan memanfaatkan kekuatan penuh Java Collections Framework.

Kapan Menggunakan Struktur Data Tertentu?

Menentukan struktur data yang tepat dalam Java Collections Framework sangat penting untuk kinerja dan efisiensi kode. Berikut ini adalah panduan kapan sebaiknya menggunakan berbagai implementasi:

  • ArrayList:

    • Gunakan jika: Anda membutuhkan akses cepat ke elemen berdasarkan indeks dan penambahan elemen sering terjadi di akhir daftar.
    • Kelebihan: Akses dan iterasi cepat.
    • Kekurangan: Operasi penyisipan atau penghapusan elemen di tengah daftar memakan waktu.
  • LinkedList:

    • Gunakan jika: Anda sering menyisipkan atau menghapus elemen di tengah-tengah koleksi.
    • Kelebihan: Penyisipan dan penghapusan elemen lebih efisien dibandingkan ArrayList untuk kasus tertentu.
    • Kekurangan: Akses elemen lebih lambat karena harus menelusuri elemen satu per satu.
  • HashSet:

    • Gunakan jika: Anda memerlukan koleksi tanpa duplikasi dan tidak peduli dengan urutan elemen.
    • Kelebihan: Operasi penambahan dan pencarian cepat.
    • Kekurangan: Tidak menjamin urutan elemen.
  • LinkedHashSet:

    • Gunakan jika: Anda ingin mempertahankan urutan elemen saat dimasukkan ke dalam set.
    • Kelebihan: Menyimpan elemen dalam urutan yang konsisten.
    • Kekurangan: Lebih lambat dari HashSet.
  • TreeSet:

    • Gunakan jika: Anda membutuhkan elemen dalam urutan alami atau urutan yang ditentukan oleh comparator.
    • Kelebihan: Elemen selalu disimpan dalam urutan yang diinginkan.
    • Kekurangan: Operasi sedikit lebih lambat dibandingkan HashSet karena pemeliharaan struktur pohon.
  • HashMap:

    • Gunakan jika: Anda membutuhkan pemetaan kunci ke nilai tanpa memperhatikan urutan.
    • Kelebihan: Operasi penyimpanan dan pengambilan yang cepat.
    • Kekurangan: Tidak mempertahankan urutan kunci.
  • LinkedHashMap:

    • Gunakan jika: Anda ingin memetakan kunci ke nilai dan mempertahankan urutan elemen saat ditambahkan.
    • Kelebihan: Mempertahankan urutan dan menawarkan kinerja yang hampir setara dengan HashMap.
    • Kekurangan: Sedikit lebih lambat karena mempertahankan urutan elemen.
  • TreeMap:

    • Gunakan jika: Anda ingin kunci disimpan dalam urutan alami atau urutan yang ditentukan oleh comparator.
    • Kelebihan: Elemen disimpan dalam urutan yang teratur.
    • Kekurangan: Operasi lebih lambat dibandingkan HashMap dan LinkedHashMap.

Tips dan Praktik Terbaik

  • Pilih Struktur Data yang Tepat: Pahami kebutuhan proyek Anda sebelum memilih struktur data. Misalnya, jika Anda memerlukan akses cepat berdasarkan indeks, ArrayList mungkin pilihan terbaik. Jika Anda perlu menghindari duplikasi, pertimbangkan Set.
  • Gunakan Generics: Selalu gunakan generics untuk menjaga keamanan tipe data dan menghindari ClassCastException.
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
System.out.println(list); // Output: [Hello, World]

Dengan generics, Anda dapat memastikan bahwa hanya tipe data yang sesuai yang bisa ditambahkan ke dalam koleksi.

    • Perhatikan Kompleksitas Waktu: Pahami kompleksitas waktu untuk operasi dasar (misalnya, add, remove, get) dari setiap struktur data. Ini membantu Anda mengoptimalkan kinerja aplikasi Anda.
Sedikit tambahan

Kesimpulan Akhir

Java Collections Framework adalah solusi yang fleksibel dan canggih untuk kebutuhan penyimpanan dan pengelolaan data. Memahami perbedaan antarmuka seperti List, Set, dan Map, serta implementasi-implementasi yang relevan, sangat membantu programmer dalam memilih struktur data yang paling sesuai untuk situasi tertentu.

Dengan hierarki koleksi yang terstruktur dan fleksibel, programmer bisa mengembangkan aplikasi yang lebih efisien, aman, dan mudah dikelola.


Catatan Tambahan Perbedaan dan Persamaan Antara Semuanya

Berikut adalah tabel yang menjelaskan kesamaan dan perbedaan antara List, Map, Set, dan Queue dalam Java:

AspekListMapSetQueue
DefinisiAntarmuka yang menyimpan elemen dalam urutan tertentu.Antarmuka yang memetakan kunci unik ke nilai.Antarmuka yang menyimpan elemen unik tanpa duplikasi.Antarmuka yang menyimpan elemen berdasarkan urutan masuk, mengikuti prinsip FIFO atau LIFO.
Struktur DataBerbasis elemen tunggal dengan indeks.Berbasis pasangan kunci-nilai (key-value pair).Berbasis elemen tunggal tanpa pasangan.Berbasis elemen tunggal yang diproses berdasarkan urutan masuk atau prioritas.
Elemen DuplikatMengizinkan elemen duplikat.Kunci harus unik, tetapi nilai dapat duplikat.Tidak mengizinkan elemen duplikat.Mengizinkan elemen duplikat, tergantung implementasinya.
Urutan ElemenMenjaga urutan elemen sesuai penambahan.HashMap tidak menjamin urutan; LinkedHashMap mempertahankan urutan; TreeMap menyimpan dalam urutan alami.HashSet tidak menjamin urutan; LinkedHashSet mempertahankan urutan; TreeSet menjaga urutan alami.Implementasi seperti PriorityQueue mengatur elemen berdasarkan prioritas.
Akses ElemenElemen diakses berdasarkan indeks.Elemen diakses menggunakan kunci.Elemen diakses secara langsung tanpa indeks atau kunci.Elemen diakses dari kepala antrian (head).
ImplementasiArrayList, LinkedList, Vector, Stack.HashMap, LinkedHashMap, TreeMap, ConcurrentHashMap.HashSet, LinkedHashSet, TreeSet.PriorityQueue, ArrayDeque, LinkedList.
Metode Utamaadd(), get(), remove(), indexOf().put(), get(), remove(), containsKey().add(), remove(), contains().offer(), poll(), peek().
Kompleksitas AksesO(1) untuk ArrayList (akses); O(n) untuk LinkedList.O(1) untuk HashMap (pencarian), O(log n) untuk TreeMap.O(1) untuk HashSet, O(log n) untuk TreeSet.O(1) untuk offer(), O(1) untuk poll() di ArrayDeque.
PenggunaanCocok untuk daftar dengan urutan elemen yang tetap dan mengizinkan duplikat.Cocok untuk memetakan data kunci ke nilai.Cocok untuk memastikan keunikan elemen.Cocok untuk antrian tugas, antrean, atau sistem pemrosesan prioritas.

Kesamaan:

  • Semua merupakan bagian dari Java Collections Framework.
  • Semua digunakan untuk mengelola dan menyimpan kumpulan elemen.
  • Masing-masing antarmuka memiliki implementasi yang sesuai untuk kebutuhan berbeda.

Perbedaan Utama:

  • List mengizinkan elemen duplikat dan memiliki urutan berdasarkan indeks.
  • Map beroperasi dengan pasangan kunci-nilai, di mana kunci harus unik tetapi nilai bisa duplikat.
  • Set hanya mengizinkan elemen unik dan tidak mengizinkan duplikat.
  • Queue digunakan untuk menyimpan elemen dalam urutan tertentu untuk diproses, baik FIFO (First-In-First-Out) atau LIFO (Last-In-First-Out).

Dengan memahami kesamaan dan perbedaan ini, seorang programmer dapat memilih struktur data yang paling sesuai dengan kebutuhan spesifik proyek mereka.

Apa yang di maksud dengan Hash pada kontek diatas?

Dalam konteks di atas, "Hash" mengacu pada teknik hashing yang digunakan dalam struktur data seperti HashMap, HashSet, dan implementasi lain yang berbasis hash. Hashing adalah proses mengonversi data (biasanya berupa kunci atau elemen) menjadi representasi nilai numerik tetap yang disebut hash code. Teknik ini membantu menyimpan dan mengambil elemen secara efisien di dalam struktur data.

Berikut penjelasan lebih rinci:

1. Fungsi Hash (Hash Function)

Fungsi hash adalah algoritma yang menerima input (kunci) dan mengembalikan nilai hash (hash code). Nilai hash ini digunakan untuk menentukan lokasi di mana elemen tersebut akan disimpan di dalam array internal dari struktur data.

2. Mengapa Menggunakan Hashing?

Hashing memberikan akses cepat ke elemen dalam struktur data. Dalam HashMap dan HashSet, hashing digunakan untuk memetakan elemen ke lokasi di array, sehingga memungkinkan operasi pencarian, penyisipan, dan penghapusan yang sangat cepat (dalam kondisi ideal, O(1)).

3. Contoh Penggunaan Hashing

  • HashMap: Setiap kunci dalam HashMap di-hash menjadi indeks array untuk menyimpan nilai terkait. Saat kunci dicari, fungsi hash akan mengubah kunci tersebut menjadi indeks untuk mendapatkan nilai secara cepat.
  • HashSet: Digunakan untuk menyimpan elemen unik, dan elemen-elemen di-hash untuk memastikan bahwa duplikasi tidak terjadi. Operasi penambahan dan pencarian elemen juga menggunakan hash code untuk menemukan lokasi elemen.

4. Masalah Hashing: Collision (Tabrakan)

Collision terjadi ketika dua elemen yang berbeda menghasilkan hash code yang sama dan dipetakan ke indeks yang sama dalam array. Struktur data berbasis hash memiliki strategi untuk menangani tabrakan ini, seperti:

  • Chaining (Rantai): Setiap indeks array menyimpan daftar elemen (bucket) untuk menangani elemen dengan hash code yang sama.
  • Open Addressing: Jika tabrakan terjadi, struktur data akan mencari indeks berikutnya yang kosong.

5. Keuntungan Hashing

  • Kinerja cepat: Operasi penambahan, pencarian, dan penghapusan bisa sangat efisien (hampir O(1)).
  • Penggunaan memori yang optimal: Dengan hashing, elemen-elemen dapat disimpan dan diakses tanpa banyak ruang tambahan.

Hashing adalah fondasi penting dalam banyak implementasi struktur data modern di Java, memungkinkan pengelolaan elemen yang efisien dengan kinerja yang baik untuk berbagai operasi.


Comments

Popular posts from this blog

Numpang Kerja Remote dari Bandung Creative Hub

Semalam kemarin (09 Januari 2019) tidak sengaja kami sekeluarga lewat Bandung Digital Hub saat pulang dari Fish Wow Cheeseee  yang di Jl. Lombok. Bandung Digital Hub ini sendiri berlokasi tidak jauh dari dari tempat kami makan tersebut, yaitu berlokasi di Jl. Laswi No.7, Kacapiring, Batununggal, Kota Bandung, Jawa Barat 40271. Berhubung untuk bulan Januari 2019 ini sedang tidak masuk ke kantor maka saya putuskan untuk besoknya (hari ini 09 Januari 2019) nyoba untuk bekerja remote dari Bandung Digital Hub , apalagi istri yang kebetulan follower pak Ridwan Kamil di Instagram juga Facebook dan tampaknya pernah lihat ulasan mengenai tempat ini sehingga tampak antusias supaya saya datang ketempat ini ini dan mencoba bekerja dari gedung creative hub dan coworking yang keren ini.  Tempat Parkir Masalah utama saat kita datang ke coworking space terutama yang berlokasi di Bandung (atau mungkin kota-kota lainnya) adalah lahan parkir, kadang lahan parkir ...

Numpang Kerja Remote dari Bandung Digital Valley

Satu lagi co-working place  gratisan dan keren yang cukup populer dikota Bandung, co-working place yang juga memberikan fasilitas tempat kerja (co-working place) dan fitur-fitur menarik lainnya,  co-working place keren  ini adalah Bandung Digital Valley atau yang sering disingkat BDV . C o-working place  Bandung Digital Valley ini  merupakan bagian dari Telkom , mulai aktif digunakan dari sekitar tahun 2012 lalu .  Tempat ini biasanya menjadi tempat favorit bagi para pengiat startup, freelancer, dan mahasiswa . Gedung BDV Gedung BDV Gedung BDV Co-working space Bandung Digital Valley ini sendiri berlokasi di Menara Bandung Digital Valley, Jl. Gegerkalong Hilir No.47, Sukarasa, Sukasari, Kota Bandung, Jawa Barat, detailnya bisa dilihat di Google map berikut. Pemandangan jalan setelah pintu satpam. Free Co-working Space Membership Untuk mulai menggunakan fasilitas co-working space ini secara gratis maka yang pe...

Membuat Authentikasi Berbasis Token pada Spring Boot dengan Spring Security dan JWT

Setelah beberapa kali mencari tutorial tentang otentikasi aplikasi web Spring Boot dengan menggunakan JWT yang mudah dipahami akhirnya saya menemukan artikel berbahasa Inggris tapi sangat mudah dipahami  dan diikuti, artikel tersbut berada disini , dengan judul " Spring Boot Token based Authentication with Spring Security & JWT ". Untuk memudahkan orang-orang yang terbiasa membaca artikel dalam bahasa indonesia (termasuk saya sendiri), artikel ini saya buat dan susun ulang (artikel aslinya tidak tertulis dengan runtut dan dapat membuat pemula bingung dengan berbagai error yang muncul) supaya lebih mudah untuk diikuti dan dapat di gunakan bersama. Applikasi yang akan kita buat adalah aplikasi web yang setiap endpoint-nya hanya bisa di akses oleh role tertentu. 1. Tools Yang Diperlukan IntelliJ Idea text editor. Spring Assistant Plugin. Postman. PostgreSQL + DBeaver. Min Java 8 Spring Boot 2.1.8 (dengan Spring Security, Spring Web, Spring Data JPA). jjwt 0.9.1. Maven 3.6.1....