각진 세상에 둥근 춤을 추자

[Java] LinkedList 클래스 본문

Java

[Java] LinkedList 클래스

circle.j 2022. 9. 29. 12:31

 

배열은 연속된 자료 구조를 구현한다. 

하지만 배열은 중간에 자료를 삽입하거나 삭제할 때 나머지 자료를 이동시켜 빈 공간을 만들지 못한다. 

이런 점을 개선한 자료 구조를 링크드 리스트(linked list)라고 한다. 

 

링크드 리스트의 각 요소는 다음 요소를 가리키는 주소 값을 가진다. 

 

 

따라서 물리적인 메모리는 떨어져 있어도 논리적으로 앞뒤 순서가 있을 수 있다. 

 

만약 A → B → D 가 순차적으로 저장된 링크드 리스트가 있다고 가정한다.   

 

 

리스트의 3번째 위치(B와 D사이)에 'C' 요소를 추가해 본다.

기존의 배열이라면 D를 뒤로 밀어내고 공간을 비워 그 자리에 C를 놓을 것이다.

하지만 링크드 리스트는 서로 가리키고 있는 주소 값만 변경해 주면 된다. 

B가 가리키던 다음 위치를 C로 변경하고, C가 가리키는 다음 위치를 D로 설정하면 된다. 

그러면 논리적으로 A → B → C → D 순서가 된다. 

 

 

만약 A → B → C → D 순서에서 'B'를 제거하고자 할 때도 각 요소가 가리키는 주소 값을 변경해 주면 된다.

A가 가리키는 다음 위치를 B가 아닌 C로 변경하기만 하면 A → C → D 순서가 된다. 

이때 제거된 B의 메모리는 자바의 가비지 컬렉터에 의해 수거된다. 

 

예제를 통해 LinkedList 클래스를 이해해 본다. 

 

package ch12_3;

import java.util.LinkedList;

public class LinkedListTest {
	public static void main(String[] args) {
		
		LinkedList<String> myList = new LinkedList<String>();
		
		// 링크드 리스트에 요소 추가
		myList.add("A");
		myList.add("B");
		myList.add("C");
		
		// 리스트 전체 출력
		System.out.println(myList);
		
		// 링크드 리스트의 첫 번째 위치에 D를 추가
		myList.add(1, "D");
		System.out.println(myList);
		
		// 연결 리스트의 맨 앞에 0을 추가
		myList.addFirst("0");
		System.out.println(myList);

		// 연결 리스트의 맨 뒤 요소를 삭제 
		myList.removeLast();
		System.out.println(myList);
	}
}

 

 

 

 

'Java' 카테고리의 다른 글

[Java] GUI 프로그래밍  (0) 2022.10.10
[Java] Socket을 이용한 Client/Server 채팅 프로그램  (0) 2022.10.03
[Java] List 인터페이스  (0) 2022.09.29
[Java] 컬렉션 프레임워크  (0) 2022.09.28
[Java] 제네릭(Generic)  (0) 2022.09.28