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 :
- Menambahkan data melewati batas index,
- Menambahkan data dari depan,
- Menambahkan data di tengah-tengah,
- 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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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 :
- java.util.LinkedList (Utility linked list yang disediakan Java)
- java.util.Scanner (Utility yang digunakan untuk mendapatkan input)
- java.util.InputMismatchException (Utility yang diguanakn untuk mendapatkan error input)
Method yang digunakan :
- userInput - untuk mendapatkan input user
- displayData - untuk meng-output setiap data pada linked list
- addNewData dan addRear - untuk menambahkan data baru
- addFront - untuk menambahkan data dari depan list
- addInside - untuk menambahkan data pada index yang dipilih
- searchData - untuk mencari data pada list
- removeData - untuk menghapus data dari index yang dipilih
- removeFirst - untuk menghapus data terdepan dari list
- removeLast - untuk menghapus data paling belakang dari list
- removeValue - untuk menghapus data yang dipilih
Implementasi Linked-List
Setelah program di run dan diberikan input, akan didapatkan output sebagai berikut.
Komentar
Posting Komentar