Java에서 연결된 목록을 만드는 가장 좋은 방법은 무엇입니까?Java로 연결된 목록 데이터 구조를 만들려면 어떻게해야합니까?
답변
자바에 익숙한 개발자들에게 확실한 해결책은 이미 java.util의 에서 제공하는 LinkedList의 클래스를 사용하는 것입니다. 그러나 어떤 이유로 든 구현을 직접 만들고 싶다고 가정 해보십시오. 다음은 목록의 시작 부분에 새 링크를 삽입하고 목록의 시작 부분에서 삭제하고 목록을 반복하여 포함 된 링크를 인쇄하는 링크 된 목록의 빠른 예입니다. 향상이 구현, 그리고 뿐만 아니라 및 종류 방법을 얻을 추가하여 및 중간 또는 끝에서을 삭제 삽입에 방법을 추가, 그것을 이중 연결리스트 만들기 등이 있습니다.
주 : 예에서, 링크 객체가 실제로 다른 링크 개체가 포함되어 있지 않습니다 - 넥스트 링크 실제로 다른 링크 만 참조입니다. 당신이 쓸 것입니다 것보다 아마 훨씬 더 최적화 때문에
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();
}
}
또한 int와 double을 저장하는 대신 데이터 유형에 제네릭을 사용하도록이 코드를 쉽게 향상시킬 수 있습니다. – shsteimer
@shsteimer : 꽤 확실하지만이 코드를 사용하는 것이이 기술을 입증하는 것이기 때문에 누구에게 도움이되지 않습니다. 기본 아이디어 만 확산 될 것입니다. –
'public Link nextLink'를 가지고 수업 외부에서 운영하는 것은 좋은 방법이 아닙니다. 'Link'가'LinkList'의 내부 클래스 일 때 존경받을 수 있습니다. 자바가 다른 버전의 것 인 것처럼 작성된 또 다른 코드 모음입니다. – Bart
Java는 LinkedList 구현을 가지고 있으므로 체크 아웃 할 수 있습니다. JDK와 그 소스는 java.sun.com에서 다운로드 할 수 있습니다.
java.util.LinkedList을 사용하십시오. 이처럼 :
는list = new java.util.LinkedList()
그것의 더 나은이되는 java.util.LinkedList를 사용합니다.
그리고 처음으로 작동합니다. –
위의 링크 된 목록은 반대 방향으로 표시됩니다. 나는 삽입 방법의 올바른 구현
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;
}
}
별도로 명시하지 않는 한 끝에 추가했습니다. :-) –
//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;
}
}
}
}
링크 된 목록을 만드는 가장 좋은 방법은 링크 된 목록에 내장 된 사용하는 것입니다해야한다고 생각합니다. 내장 클래스를 다시 작성하지 마십시오. –
이 질문은 프로그래머 토론을위한 합법적이고 건설적인 것입니다. – anshulkatta