Cách tốt nhất để tạo một danh sách liên kết trong Java là gì?
Cách tốt nhất để tạo một danh sách liên kết trong Java là gì?
Câu trả lời:
Giải pháp rõ ràng cho các nhà phát triển quen thuộc với Java là sử dụng lớp LinkedList đã được cung cấp trong java.util . Nói, tuy nhiên, bạn muốn thực hiện của riêng bạn vì một số lý do. Dưới đây là một ví dụ nhanh về danh sách được liên kết chèn một liên kết mới ở đầu danh sách, xóa từ đầu danh sách và lặp qua danh sách để in các liên kết có trong đó. Các cải tiến cho việc triển khai này bao gồm làm cho nó trở thành một danh sách liên kết kép , thêm các phương thức để chèn và xóa từ giữa hoặc cuối, và bằng cách thêm các phương thức get và sort .
Lưu ý : Trong ví dụ, đối tượng Liên kết không thực sự chứa đối tượng Liên kết khác - nextLink thực sự chỉ là một tham chiếu đến liên kết khác.
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();
}
}
public Link nextLink
và hoạt động bên ngoài lớp học. Nó có thể được tôn trọng khi Link
sẽ là một lớp nội bộ LinkList
. Nó là một nhóm mã khác được viết dưới dạng Java chỉ là một phiên bản khác của c.
Java có một triển khai LinkedList mà bạn có thể muốn xem. Bạn có thể tải xuống JDK và các nguồn của nó tại java.sun.com .
LinkedList
, bạn chỉ có thể xem LinkedList.java
trực tuyến tại đây . Trang đó thậm chí cú pháp làm nổi bật mã và hiển thị nội dung các bình luận Javadoc.
Sử dụng java.util.LinkedList . Như thế này:
list = new java.util.LinkedList()
Danh sách liên kết ở trên hiển thị theo hướng ngược lại. Tôi nghĩ rằng việc thực hiện đúng phương pháp chèn phải là
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;
}
}
Sử dụng java.util.LinkedList tốt hơn nhiều, vì có lẽ nó được tối ưu hóa hơn nhiều so với cái mà bạn sẽ viết.
//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;
}
}
}
}