Apa cara terbaik untuk membuat daftar tertaut di Java?
java
data-structures
linked-list
Lance Fisher
sumber
sumber
Jawaban:
Solusi yang jelas untuk pengembang yang akrab dengan Java adalah dengan menggunakan kelas LinkedList yang sudah disediakan di java.util . Katakanlah, bagaimanapun, Anda ingin membuat implementasi Anda sendiri karena suatu alasan. Berikut adalah contoh cepat dari daftar tertaut yang menyisipkan tautan baru di awal daftar, menghapus dari awal daftar dan memutar melalui daftar untuk mencetak tautan yang ada di dalamnya. Peningkatan implementasi ini termasuk menjadikannya daftar tertaut ganda , menambahkan metode untuk menyisipkan dan menghapus dari tengah atau akhir, dan dengan menambahkan metode get dan sortir juga.
Catatan : Dalam contoh, objek Link sebenarnya tidak berisi objek Link lain - nextLink sebenarnya hanya referensi ke link lain.
class Link { public int data1; public double data2; public Link nextLink; //Link constructor public Link(int d1, double d2) { data1 = d1; data2 = d2; } //Print Link data public void printLink() { System.out.print("{" + data1 + ", " + data2 + "} "); } } class LinkList { private Link first; //LinkList constructor public LinkList() { first = null; } //Returns true if list is empty public boolean isEmpty() { return first == null; } //Inserts a new Link at the first of the list public void insert(int d1, double d2) { Link link = new Link(d1, d2); link.nextLink = first; first = link; } //Deletes the link at the first of the list public Link delete() { Link temp = first; if(first == null){ return null; //throw new NoSuchElementException(); // this is the better way. } first = first.nextLink; return temp; } //Prints list data public void printList() { Link currentLink = first; System.out.print("List: "); while(currentLink != null) { currentLink.printLink(); currentLink = currentLink.nextLink; } System.out.println(""); } } class LinkListTest { public static void main(String[] args) { LinkList list = new LinkList(); list.insert(1, 1.01); list.insert(2, 2.02); list.insert(3, 3.03); list.insert(4, 4.04); list.insert(5, 5.05); list.printList(); while(!list.isEmpty()) { Link deletedLink = list.delete(); System.out.print("deleted: "); deletedLink.printLink(); System.out.println(""); } list.printList(); } }
sumber
public Link nextLink
dan mengoperasikannya di luar kelas. Bisa dihormati ketikaLink
akan menjadi kelas internalLinkList
. Ini adalah sekelompok kode lain yang ditulis karena Java hanyalah versi-lain-c.Java memiliki implementasi LinkedList , yang mungkin ingin Anda periksa. Anda dapat mengunduh JDK dan sumbernya di java.sun.com .
sumber
LinkedList
, Anda dapat melihatnyaLinkedList.java
online di sini . Halaman itu bahkan menyoroti sintaks kode dan membuat komentar Javadoc sebaris.Gunakan java.util.LinkedList . Seperti ini:
list = new java.util.LinkedList()
sumber
Daftar terkait di atas ditampilkan dalam arah yang berlawanan. Saya pikir penerapan metode penyisipan yang benar seharusnya
public void insert(int d1, double d2) { Link link = new Link(d1, d2); if(first==null){ link.nextLink = null; first = link; last=link; } else{ last.nextLink=link; link.nextLink=null; last=link; } }
sumber
Jauh lebih baik menggunakan java.util.LinkedList, karena mungkin jauh lebih optimal, daripada yang akan Anda tulis.
sumber
//slightly improved code without using collection framework package com.test; public class TestClass { private static Link last; private static Link first; public static void main(String[] args) { //Inserting for(int i=0;i<5;i++){ Link.insert(i+5); } Link.printList(); //Deleting Link.deletefromFirst(); Link.printList(); } protected static class Link { private int data; private Link nextlink; public Link(int d1) { this.data = d1; } public static void insert(int d1) { Link a = new Link(d1); a.nextlink = null; if (first != null) { last.nextlink = a; last = a; } else { first = a; last = a; } System.out.println("Inserted -:"+d1); } public static void deletefromFirst() { if(null!=first) { System.out.println("Deleting -:"+first.data); first = first.nextlink; } else{ System.out.println("No elements in Linked List"); } } public static void printList() { System.out.println("Elements in the list are"); System.out.println("-------------------------"); Link temp = first; while (temp != null) { System.out.println(temp.data); temp = temp.nextlink; } } } }
sumber