Linked List di Java

 


Apa itu Linked List?

    Linked-List merupakan salah satu struktur data yang terdiri dari node-node yang saling berhubungan.
Linked-List memiliki bentuk mirip seperti array. Perbedaan dari Linked-List dan Array bisa dilihat pada gambar di bawah.


    Dari gambar di atas, dapat dilihat bahwa setiap data array sudah memiliki alamat yang saling berikatan dan tidak dapat diubah. Berbeda dengan linked list, dimana setiap data memiliki alamatnya sendiri. Nah untuk memperoleh data selanjutnya, linked list menggunakan pointer yang menunjukkan alamat node dari data selanjutnya. Hal ini membuat linked-list memiliki bentuk lebih dinamis dari array biasa.

Kelebihan dari Linked List

    Dengan bentuknya yang lebih dinamis, linked-list dapat diberikan operasi-operasi yang tidak dapat diberikan pada array biasa. Misalnya :
  1. Menambahkan data melewati batas index,
  2. Menambahkan data dari depan,
  3. Menambahkan data di tengah-tengah,
  4. Menghapus data dari list, dan lainnya
    Sebenarnya array biasa juga bisa melakukan hal-hal diatas, tetapi akan dibutuhkan array baru untuk setiap operasinya. Hal inilah yang membuat array biasa tidak dinamis dan dinilai kurang efisien jika dilakukan operasi seperti di atas.

Linked List di Java

    Setelah mengetahui apa itu linked-list, selanjutnya akan dibahas mengenai methods yang dipakai pada linked-list dan implementasinya. Berikut merupakan source code dari implementasi linked-list.

/**
* Linked List Methods
*
* @author Anggito Anju
* @version ver 1.0 - 28 Apr 21
*/
import java.util.LinkedList;
import java.util.Scanner;
import javax.xml.crypto.Data;
import java.util.InputMismatchException;
public class LinkedListMethods
{
//buat object linked list
private static LinkedList<String> listData = new LinkedList<String>();
//method untuk mendapatkan user input
private static Scanner userInput() {
return new Scanner(System.in);
}
//method untuk men-display semua data yang ada di list
private static void displayData() {
System.out.println("\nData dalam list: " + listData);
System.out.println("Jumlah Data: " + listData.size());
System.out.println();
}
//method untuk menambahkan data baru pada list
private static void addNewData() {
System.out.println("Masukkan data baru: ");
String userNewInput = userInput().nextLine();
//memakai method add dari library java.util.LinkedList
listData.add(userNewInput);
displayData();
}
//method untuk menambahkan data baru dari depan
private static void addFront() {
System.out.println("Masukkan data dari depan: ");
String userFrontInput = userInput().nextLine();
//memakai method addFirst dari library java.util.LinkedList
listData.addFirst(userFrontInput);
displayData();
}
//method untuk menambahkan data baru dari belakang
private static void addRear() {
System.out.println("Masukkan data dari belakang: ");
String userRearInput = userInput().nextLine();
//memakai method addLast dari library java.util.LinkedList
listData.addLast(userRearInput);
displayData();
}
//method untuk menambahkan data baru di tengah-tengah
private static void addInside() {
boolean status = true;
int indexData = 0;
displayData();
while(status) {
System.out.print("Masukkan index data baru: ");
System.out.println("(0 - "+ (listData.size()-1) +")");
try {
status = false;
indexData = userInput().nextInt();
}
catch(InputMismatchException e) {
System.out.println("Input harus berupa angka !");
status = true;
}
if(indexData < 0 || indexData > listData.size()-1) {
status = true;
System.out.println("Index Out of Bounds!");
continue;
}
}
System.out.println("Masukkan value pada index "+ indexData +"");
String tempValue = userInput().nextLine();
listData.add(indexData, tempValue);
displayData();
}
//method untuk mencari data pada list
private static boolean searchData(String value) {
//gunakan method contatins dari java.util.LinkedList untuk mencari data
return (listData.contains(value));
}
//method untuk menghapus value dari index list
private static void removeData() {
boolean status = true;
int indexData = 0;
displayData();
while(status) {
System.out.println("Masukkan index data yang ingin dihapus: ");
System.out.println("(0 - "+ (listData.size()-1) +")");
try {
status = false;
indexData = userInput().nextInt();
}
catch(InputMismatchException e) {
System.out.println("Input harus berupa angka !");
status = true;
}
if(indexData < 0 || indexData > listData.size()-1) {
status = true;
System.out.println("Index Out of Bounds!");
continue;
}
}
listData.remove(indexData);
displayData();
}
//method untuk menghapus value pertama dari list
private static void removeFirst() {
listData.removeFirst();
displayData();
}
//method untuk menghapus value terakhir dari list
private static void removeLast() {
listData.removeLast();
displayData();
}
//method untuk menghapus value yang terdapat dalam list
private static void removeValue() {
displayData();
System.out.println("Masukkan value yang ingin dihapus: ");
String value = userInput().nextLine();
if(searchData(value)) {
listData.remove(value);
}
else {
System.out.println("Value yang ada masukkan tidak terdapat dalam list");
}
displayData();
}
//main methods
public static void main(String[] args) {
addFront();
addInside();
removeData();
}
}
   

    Penjelasan Methods

    Untuk implementasinya akan dibutuhkan beberapa utility, seperti :
  1. java.util.LinkedList (Utility linked list yang disediakan Java)
  2. java.util.Scanner (Utility yang digunakan untuk mendapatkan input)
  3. java.util.InputMismatchException (Utility yang diguanakn untuk mendapatkan error input)
    Method yang digunakan :
  1. userInput - untuk mendapatkan input user
  2. displayData - untuk meng-output setiap data pada linked list
  3. addNewData dan addRear - untuk menambahkan data baru
  4. addFront - untuk menambahkan data dari depan list
  5. addInside - untuk menambahkan data pada index yang dipilih
  6. searchData - untuk mencari data pada list
  7. removeData - untuk menghapus data dari index yang dipilih
  8. removeFirst - untuk menghapus data terdepan dari list
  9. removeLast - untuk menghapus data paling belakang dari list
  10. removeValue - untuk menghapus data yang dipilih

    Implementasi Linked-List

    Setelah program di run dan diberikan input, akan didapatkan output sebagai berikut.

    

Komentar

Postingan populer dari blog ini

Dokumentasi ETS PWEB 2022

Programming in Java : Mengubah Ekspresi Infix menjadi Postfix

Implementasi Stack di Java