logo

자바의 LinkedList

연결리스트(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]>

List-ArrayList-in-Java 심층 연구

위 그림에서 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를 사용하면 다음과 같은 장점이 있습니다.

  1. 동적 크기: Vector와 마찬가지로 LinkedList의 크기는 동적으로 늘어나거나 줄어들 수 있으므로 초기 크기 설정에 대해 걱정할 필요가 없습니다.
  2. 효율적인 삽입 및 삭제: LinkedList는 삽입 또는 삭제 지점 이후의 모든 요소를 ​​이동하는 대신 요소 간의 링크만 변경하면 되기 때문에 목록 중간에 요소를 삽입하거나 삭제하는 데 효율적인 데이터 구조입니다.
  3. 유연한 반복: 연결된 목록을 사용하면 각 요소가 이전 요소와 후속 요소 모두에 대한 참조를 갖기 때문에 어느 방향으로든 목록을 효율적으로 반복할 수 있습니다.

Java에서 LinkedList를 사용할 때의 단점:

  1. 성능: LinkedList는 개별 요소에 액세스할 때 ArrayList보다 성능이 느립니다. 이는 원하는 요소에 도달하려면 목록을 순회해야 하는 반면 ArrayList를 사용하면 인덱스를 사용하여 원하는 요소에 간단히 액세스할 수 있기 때문입니다.
  2. 메모리 오버헤드: LinkedList에는 ArrayList보다 더 많은 메모리가 필요합니다. 각 요소에는 이전 요소와 후속 요소에 대한 링크를 위한 추가 메모리가 필요하기 때문입니다.

참고 도서:

Java Collections Framework 및 LinkedList에 대해 학습하기 위한 좋은 참고서는 Naftalin 및 Wadler의 Java Collections입니다. 이 책에서는 LinkedList를 포함한 Java 컬렉션 프레임워크에 대한 포괄적인 정보를 제공하고 이러한 클래스를 효과적으로 사용하는 방법을 이해하는 데 도움이 되는 많은 예제와 연습이 포함되어 있습니다.