연결리스트(Linked List)는 다음의 일부이다. 수집 프레임워크 java.util 패키지에 있습니다. 이 클래스는 이중 연결 목록 데이터 구조의 구현입니다.
일반 연결 목록과 이중 LinkedList의 주요 차이점은 이중 연결 목록에는 일반적으로 이전 포인터라고 하는 추가 포인터와 함께 다음 포인터 및 단일 연결 목록에 있는 데이터가 포함되어 있다는 것입니다.
LinkedList의 생성자:
LinkedList를 생성하려면 LinkedList 클래스의 객체를 생성해야 합니다. LinkedList 클래스는 목록 생성을 가능하게 하는 다양한 생성자로 구성됩니다. 이 클래스에서 사용할 수 있는 생성자는 다음과 같습니다.
1. 링크드리스트(): 이 생성자는 빈 연결 목록을 만드는 데 사용됩니다. ll이라는 이름의 빈 LinkedList를 생성하려면 다음과 같이 생성할 수 있습니다.
LinkedList ll = 새로운 LinkedList();
2. LinkedList(컬렉션 C): 이 생성자는 컬렉션의 반복자가 반환한 대로 지정된 컬렉션의 모든 요소를 포함하는 순서가 지정된 목록을 만드는 데 사용됩니다. ll이라는 이름의 LinkedList를 생성하려면 다음과 같이 생성할 수 있습니다.
LinkedList ll = 새로운 LinkedList(C);
Java LinkedList에 대한 방법:
| 방법 | 설명 |
|---|---|
| add(int 인덱스, E 요소) | 이 메소드는 이 목록의 지정된 위치에 지정된 요소를 삽입합니다. |
| 추가(그리고) | 이 메소드는 지정된 요소를 이 목록의 끝에 추가합니다. |
| addAll(int 인덱스, 컬렉션 c) | 이 메소드는 지정된 컬렉션의 모든 요소를 지정된 위치에서 시작하여 이 목록에 삽입합니다. |
| addAll(컬렉션 c) | 이 메소드는 지정된 컬렉션의 반복자가 반환하는 순서대로 지정된 컬렉션의 모든 요소를 이 목록의 끝에 추가합니다. |
| addFirst(E e) | 이 메소드는 이 목록의 시작 부분에 지정된 요소를 삽입합니다. |
| addLast(E e) | 이 메소드는 지정된 요소를 이 목록의 끝에 추가합니다. |
| 분명한() | 이 메소드는 이 목록에서 모든 요소를 제거합니다. |
| 클론() | 이 메서드는 이 LinkedList의 얕은 복사본을 반환합니다. |
| 포함(객체 o) | 이 목록에 지정된 요소가 포함되어 있으면 이 메서드는 true를 반환합니다. |
| 내림차순반복자() | 이 메서드는 이 deque의 요소에 대한 반복자를 역순으로 반환합니다. |
| 요소() | 이 메소드는 이 목록의 헤드(첫 번째 요소)를 검색하지만 제거하지는 않습니다. |
| get(정수 인덱스) | 이 메소드는 이 목록의 지정된 위치에 있는 요소를 반환합니다. |
| getFirst() | 이 메서드는 이 목록의 첫 번째 요소를 반환합니다. |
| 마지막() | 이 메서드는 이 목록의 마지막 요소를 반환합니다. |
| indexOf(객체 o) | 이 메소드는 이 목록에서 지정된 요소가 처음 나타나는 인덱스를 반환하거나, 이 목록에 해당 요소가 포함되어 있지 않으면 -1을 반환합니다. |
| lastIndexOf(객체 o) | 이 메소드는 이 목록에서 지정된 요소가 마지막으로 나타나는 인덱스를 반환하거나, 이 목록에 해당 요소가 포함되어 있지 않으면 -1을 반환합니다. |
| listIterator(int 인덱스) | 이 메소드는 목록의 지정된 위치에서 시작하여 이 목록에 있는 요소의 목록 반복자를(적절한 순서로) 반환합니다. |
| 제안(E e) | 이 메소드는 지정된 요소를 이 목록의 꼬리(마지막 요소)로 추가합니다. |
| OfferFirst(E 및) | 이 메소드는 이 목록의 앞에 지정된 요소를 삽입합니다. |
| 제안마지막(E e) | 이 메소드는 이 목록의 끝에 지정된 요소를 삽입합니다. |
| 몰래 엿보다() | 이 메소드는 이 목록의 헤드(첫 번째 요소)를 검색하지만 제거하지는 않습니다. |
| 엿보기첫번째() | 이 메서드는 이 목록의 첫 번째 요소를 검색하지만 제거하지는 않습니다. 또는 이 목록이 비어 있으면 null을 반환합니다. |
| 엿보기마지막() | 이 메소드는 이 목록의 마지막 요소를 검색하지만 제거하지는 않습니다. 또는 이 목록이 비어 있으면 null을 반환합니다. |
| 투표() | 이 메소드는 이 목록의 헤드(첫 번째 요소)를 검색하고 제거합니다. |
| 폴퍼스트() | 이 메서드는 이 목록의 첫 번째 요소를 검색하고 제거하거나, 이 목록이 비어 있으면 null을 반환합니다. |
| 폴마지막() | 이 메서드는 이 목록의 마지막 요소를 검색하고 제거하거나, 이 목록이 비어 있으면 null을 반환합니다. |
| 팝() | 이 메서드는 이 목록이 나타내는 스택에서 요소를 팝합니다. |
| 푸시(E 및) | 이 메서드는 이 목록이 나타내는 스택에 요소를 푸시합니다. |
| 제거하다() | 이 메소드는 이 목록의 헤드(첫 번째 요소)를 검색하고 제거합니다. |
| 제거(int 인덱스) | 이 메소드는 이 목록의 지정된 위치에 있는 요소를 제거합니다. |
| 제거(객체 o) | 이 메소드는 이 목록에서 지정된 요소가 처음으로 나타나는 경우 해당 요소를 제거합니다. |
| 제거첫번째() | 이 메서드는 이 목록에서 첫 번째 요소를 제거하고 반환합니다. |
| RemoveFirstOccurrence(객체 o) | 이 메소드는 이 목록에서 지정된 요소의 첫 번째 항목을 제거합니다(목록을 처음부터 끝까지 탐색할 때). |
| 제거마지막() | 이 메서드는 이 목록에서 마지막 요소를 제거하고 반환합니다. |
| RemoveLastOccurrence(객체 o) | 이 메소드는 이 목록에서 지정된 요소의 마지막 항목을 제거합니다(목록을 처음부터 끝까지 탐색할 때). |
| set(int 인덱스, E 요소) | 이 메소드는 이 목록의 지정된 위치에 있는 요소를 지정된 요소로 대체합니다. |
| 크기() | 이 메소드는 이 목록의 요소 수를 반환합니다. |
| 분할기() | 이 메서드는 이 목록의 요소에 대해 지연 바인딩 및 빠른 실패 Spliterator를 만듭니다. |
| toArray() | 이 메소드는 이 목록의 모든 요소를 적절한 순서(첫 번째 요소부터 마지막 요소까지)로 포함하는 배열을 반환합니다. |
| toArray(T[] a) | 이 메소드는 이 목록의 모든 요소를 적절한 순서(첫 번째 요소부터 마지막 요소까지)로 포함하는 배열을 반환합니다. 반환된 배열의 런타임 유형은 지정된 배열의 런타임 유형입니다. |
| toString() | 이 메소드는 이 목록의 모든 요소를 적절한 순서(첫 번째 요소부터 마지막 요소까지)로 포함하는 문자열을 반환하며, 각 요소는 쉼표로 구분되고 문자열은 대괄호로 묶입니다. |
다음은 위 작업의 구현입니다.
자바
// Java Program to Demonstrate> // Implementation of LinkedList> // class> > // Importing required classes> import> java.util.*;> > // Main class> public> class> GFG {> > >// Driver code> >public> static> void> main(String args[])> >{> >// Creating object of the> >// class linked list> >LinkedList ll =>new> LinkedList();> > >// Adding elements to the linked list> >ll.add(>'A'>);> >ll.add(>'B'>);> >ll.addLast(>'C'>);> >ll.addFirst(>'D'>);> >ll.add(>2>,>'E'>);> > >System.out.println(ll);> > >ll.remove(>'B'>);> >ll.remove(>3>);> >ll.removeFirst();> >ll.removeLast();> > >System.out.println(ll);> >}> }> |
>
>산출
[D, A, E, B, C] [A]>

위 그림에서 AbstractList , CopyOnWriteArrayList 및 AbstractSequentialList 는 목록 인터페이스를 구현하는 클래스입니다. 언급된 각 클래스에는 별도의 기능이 구현됩니다. 그들은:
- AbstractList: 이 클래스는 이 AbstractList 클래스를 확장하고 get() 및 size() 메서드만 구현하면 되는 수정 불가능한 목록을 구현하는 데 사용됩니다. CopyOnWriteArrayList: 이 클래스는 목록 인터페이스를 구현합니다. 이는 목록의 새로운 복사본을 만들어 모든 수정 사항(추가, 설정, 제거 등)이 구현되는 ArrayList의 향상된 버전입니다.
LinkedList에서 다양한 작업 수행:
- 요소 추가
- 요소 업데이트
- 요소 제거
- 요소 반복
- 배열()로;
- 크기();
- 제거 첫 번째();
- 마지막() 제거;
작업 1: 요소 추가
ArrayList에 요소를 추가하려면 add() 메소드를 사용할 수 있습니다. 이 메서드는 다양한 매개변수를 기반으로 여러 작업을 수행하도록 오버로드됩니다. 그들은:
- add(Object): 이 메소드는 LinkedList의 끝에 요소를 추가하는 데 사용됩니다. add(int index, Object): LinkedList의 특정 인덱스에 요소를 추가하는 데 사용됩니다.
다음은 위 작업의 구현입니다.
자바
// Java program to add elements> // to a LinkedList> > import> java.util.*;> > public> class> GFG {> > >public> static> void> main(String args[])> >{> >LinkedList ll =>new> LinkedList();> > >ll.add(>'Geeks'>);> >ll.add(>'Geeks'>);> >ll.add(>1>,>'For'>);> > >System.out.println(ll);> >}> }> |
>
>산출
[Geeks, For, Geeks]>
작업 2: 요소 변경
요소를 추가한 후 요소를 변경하려면 set() 메서드를 사용하면 됩니다. LinkedList는 색인이 생성되어 있으므로 변경하려는 요소는 해당 요소의 색인으로 참조됩니다. 따라서 이 메서드는 인덱스와 해당 인덱스에 삽입되어야 하는 업데이트된 요소를 사용합니다.
다음은 위 작업의 구현입니다.
자바
// Java program to change elements> // in a LinkedList> > import> java.util.*;> > public> class> GFG {> > >public> static> void> main(String args[])> >{> >LinkedList ll =>new> LinkedList();> > >ll.add(>'Geeks'>);> >ll.add(>'Geeks'>);> >ll.add(>1>,>'Geeks'>);> > >System.out.println(>'Initial LinkedList '> + ll);> > >ll.set(>1>,>'For'>);> > >System.out.println(>'Updated LinkedList '> + ll);> >}> }> |
스프링 부트의 주석
>
>산출
Initial LinkedList [Geeks, Geeks, Geeks] Updated LinkedList [Geeks, For, Geeks]>
작업 3: 요소 제거
LinkedList에서 요소를 제거하려면 Remove() 메소드를 사용할 수 있습니다. 이 메서드는 다양한 매개변수를 기반으로 여러 작업을 수행하도록 오버로드됩니다. 그들은:
캣 timpf 몸무게는 얼마야?
- Remove(Object): 이 메소드는 LinkedList에서 객체를 간단히 제거하는 데 사용됩니다. 그러한 객체가 여러 개 있는 경우 해당 객체의 첫 번째 발생이 제거됩니다. 제거(int index): LinkedList가 색인화되어 있으므로 이 메소드는 LinkedList의 특정 색인에 있는 요소를 단순히 제거하는 정수 값을 사용합니다. 요소를 제거한 후 요소의 인덱스가 업데이트되므로 LinkedList의 개체도 업데이트되어 요소 삭제 후 새 목록을 제공합니다.
다음은 위 작업의 구현입니다.
자바
// Java program to remove elements> // in a LinkedList> > import> java.util.*;> > public> class> GFG {> > >public> static> void> main(String args[])> >{> >LinkedList ll =>new> LinkedList();> > >ll.add(>'Geeks'>);> >ll.add(>'Geeks'>);> >ll.add(>1>,>'For'>);> > >System.out.println(>'Initial LinkedList '> + ll);> > >// Function call> >ll.remove(>1>);> > >System.out.println(>'After the Index Removal '> + ll);> > >ll.remove(>'Geeks'>);> > >System.out.println(>'After the Object Removal '> >+ ll);> >}> }> |
>
>산출
Initial LinkedList [Geeks, For, Geeks] After the Index Removal [Geeks, Geeks] After the Object Removal [Geeks]>
작업 4: LinkedList 반복
LinkedList를 반복하는 방법에는 여러 가지가 있습니다. 가장 유명한 방법은 기본 for 루프를 get() 메서드와 함께 사용하여 특정 인덱스의 요소를 가져오는 것과 고급 for 루프를 사용하는 것입니다.
다음은 위 작업의 구현입니다.
자바
// Java program to iterate the elements> // in an LinkedList> > import> java.util.*;> > public> class> GFG {> > >public> static> void> main(String args[])> >{> >LinkedList ll> >=>new> LinkedList();> > >ll.add(>'Geeks'>);> >ll.add(>'Geeks'>);> >ll.add(>1>,>'For'>);> > >// Using the Get method and the> >// for loop> >for> (>int> i =>0>; i System.out.print(ll.get(i) + ' '); } System.out.println(); // Using the for each loop for (String str : ll) System.out.print(str + ' '); } }> |
>
>산출
Geeks For Geeks Geeks For Geeks>
작업 4: toArray()를 사용하여 To Array에 연결된 목록;
자바
import> java.util.*;> public> class> GFG2 {> >public> static> void> main(String[] args)> >{> >LinkedList list=>new> LinkedList();> >list.add(>123>);> >list.add(>12>);> >list.add(>11>);> >list.add(>1134>);> >System.out.println(>'LinkedList: '>+ list);> >Object[] a = list.toArray();> >System.out.print(>'After converted LinkedList to Array: '>);> >for>(Object element : a)> >System.out.print(element+>' '>);> >}> }> |
>
>산출
LinkedList: [123, 12, 11, 1134] After converted LinkedList to Array: 123 12 11 1134>
5-size() 작업;
자바
import> java.io.*;> import> java.util.LinkedList;> public> class> GFG2 {> >public> static> void> main(String args[]) {> >LinkedList list =>new> LinkedList();> >list.add(>'Geeks for Geeks '>);> >list.add(>'is best '>);> >// Displaying the size of the list> >System.out.println(>'The size of the linked list is: '> + list.size());> >}> }> |
>
>산출
The size of the linked list is: 2>
작업 7 - RemoveFirst();
자바
import> java.io.*;> import> java.util.LinkedList;> public> class> GFG2 {> >public> static> void> main(String args[]) {> > >LinkedList list =>new> LinkedList();> >list.add(>10>);> >list.add(>20>);> >list.add(>30>);> >System.out.println(>'LinkedList:'> + list);> >System.out.println(>'The remove first element is: '> + list.removeFirst());> >// Displaying the final list> >System.out.println(>'Final LinkedList:'> + list);> >}> }> |
>
>산출
LinkedList:[10, 20, 30] The remove first element is: 10 Final LinkedList:[20, 30]>
작업 8-removelast();
자바
import> java.io.*;> import> java.util.LinkedList;> public> class> GFG2 {> >public> static> void> main(String args[])> >{> > >LinkedList list =>new> LinkedList();> >list.add(>10>);> >list.add(>20>);> >list.add(>30>);> >System.out.println(>'LinkedList:'> + list);> >// Remove the tail using removeLast()> >System.out.println(>'The last element is removed: '> + list.removeLast());> >// Displaying the final list> >System.out.println(>'Final LinkedList:'> + list);> >// Remove the tail using removeLast()> >System.out.println(>'The last element is removed: '> + list.removeLast());> >// Displaying the final list> >System.out.println(>'Final LinkedList:'> + list);> >}> }> |
>
>산출
LinkedList:[10, 20, 30] The last element is removed: 30 Final LinkedList:[10, 20] The last element is removed: 20 Final LinkedList:[10]>
Java의 LinkedList 클래스는 Java Collections Framework의 일부이며 List 인터페이스의 연결된 목록 구현을 제공합니다. 각 요소가 이전 요소 및 후속 요소에 연결되는 이중 연결 목록 데이터 구조에서 요소를 저장하고 검색할 수 있습니다.
다음은 Java에서 LinkedList를 사용하는 방법을 보여주는 간단한 예입니다.
자바
import> java.util.LinkedList;> > public> class> LinkedListExample {> >public> static> void> main(String[] args) {> >// Create a new linked list> >LinkedList linkedList =>new> LinkedList();> > >// Add elements to the linked list> >linkedList.add(>1>);> >linkedList.add(>2>);> >linkedList.add(>3>);> > >// Add an element to the beginning of the linked list> >linkedList.addFirst(>0>);> > >// Add an element to the end of the linked list> >linkedList.addLast(>4>);> > >// Print the elements of the linked list> >for> (>int> i : linkedList) {> >System.out.println(i);> >}> >}> }> |
>
>
우르피 자베드산출
0 1 2 3 4>
Java에서 LinkedList를 사용하면 다음과 같은 장점이 있습니다.
- 동적 크기: Vector와 마찬가지로 LinkedList의 크기는 동적으로 늘어나거나 줄어들 수 있으므로 초기 크기 설정에 대해 걱정할 필요가 없습니다.
- 효율적인 삽입 및 삭제: LinkedList는 삽입 또는 삭제 지점 이후의 모든 요소를 이동하는 대신 요소 간의 링크만 변경하면 되기 때문에 목록 중간에 요소를 삽입하거나 삭제하는 데 효율적인 데이터 구조입니다.
- 유연한 반복: 연결된 목록을 사용하면 각 요소가 이전 요소와 후속 요소 모두에 대한 참조를 갖기 때문에 어느 방향으로든 목록을 효율적으로 반복할 수 있습니다.
Java에서 LinkedList를 사용할 때의 단점:
- 성능: LinkedList는 개별 요소에 액세스할 때 ArrayList보다 성능이 느립니다. 이는 원하는 요소에 도달하려면 목록을 순회해야 하는 반면 ArrayList를 사용하면 인덱스를 사용하여 원하는 요소에 간단히 액세스할 수 있기 때문입니다.
- 메모리 오버헤드: LinkedList에는 ArrayList보다 더 많은 메모리가 필요합니다. 각 요소에는 이전 요소와 후속 요소에 대한 링크를 위한 추가 메모리가 필요하기 때문입니다.
참고 도서:
Java Collections Framework 및 LinkedList에 대해 학습하기 위한 좋은 참고서는 Naftalin 및 Wadler의 Java Collections입니다. 이 책에서는 LinkedList를 포함한 Java 컬렉션 프레임워크에 대한 포괄적인 정보를 제공하고 이러한 클래스를 효과적으로 사용하는 방법을 이해하는 데 도움이 되는 많은 예제와 연습이 포함되어 있습니다.