Language/Java

LinkedList❓

m5n 2024. 5. 24. 21:46

LinkedList❓

  • 각 노드가 데이터와 포인터를 가지고 하나로 연결되어 있는 방식의 자료구조
  • 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당

hashmap_image

LinkedList 장점 및 단점

장점

  • 빠른 삽입과 삭제: 각 노드가 다음 노드의 주소를 알고 있어 삽입과 삭제 연산이 노드의 재배치 없이 수행 가능
  • 동적 크기 조절: 동적으로 삽입 및 삭제 가능, 메모리 유연하게 할당 및 해제가 가능하여 메모리를 효율적으로 관리 가능

단점

  • 임의 접근의 어려움: 데이터를 순차적으로 접근해야하므로 임의 접근이 어려움
  • 추가적인 메모리 공간의 필요: 각 노드마다 다음 노드를 가리키는 포인터를 유지해야 하므로 추가적인 메모리 공간이 필요함
  • 검색 시간: 데이터를 처음부터 순차적으로 접근해야 하므로 검색 작업의 성능이 떨어짐

데이터의 삽입과 삭제가 빈번하게 발생하며 임의 접근이 필요하지 않은 상황에서 LinkedList 사용

 


 

LinkedList 사용법

LinkedList 선언

import java.util.LinkedList;

List<Integer> list = new LinkedList<>();

 

LinkedList 값 추가 및 변경

List<Integer> list = new LinkedList<>();

list.addFisrt(1);                // 맨 앞에 1을 추가
list.addLast(2);                // 맨 뒤에 2을 추가

list.add(3);                    // 맨 뒤에 3을 저장하고 성공하면 true를 반환

list.add(1, 10);                // 1번째 인덱스에 10을 추가
list.addAll(Collection c);        // 주어진 컬렉션의 모든 객체를 마지막에 저장

list.set(1, 100);                // 1번째 인덱스에 있는 데이터를 100으로 변경

 

LinkedList 값 삭제

List<Integer> list = new LinkedList<>();

list.removeFisrt();                // 첫 번째 노드를 제거
list.removeLast();                // 마지막 노드를 제거

list.remove(int index);            // index 위치에 있는 객체를 제거
list.remove(Object obj);        // 지정된 객체를 제거

list.clear();                    // list에 저장되어 있는 값 전체 삭제

 

LinkedList 값 순회

List<Integer> list = new LinkedList<>();

// for문 사용
for(int i = 0; i < list.size(); ++i) {
    System.out.println(list.get(i));
}

// for each문 사용
for(int element: list) {
    System.out.println(element);
}

// iterator 사용 
Iterator it = list.iterator();

while(it.hasNext()) {
    System.out.println(it.next());
}

 

LinkedList 기타 메서드

List<Integer> list = new LinkedList<>();

list.size();                    // 저장된 객체의 갯수 반환
list.isEmpty();                    // list가 비어있다면 true, 그렇지 않다면 false를 반환

list.contains(Object obj);        // 지정된 객체가 LinkedList에 포함되어 있다면 true, 아니면 false를 반환

list.indexOf(Object obj);        // 지정된 객체가 저장된 위치를 찾아 반환
list.lastIndexOf(Object obj);    // 지정된 객체가 저장된 위치를 뒤에서 부터 찾아 반환

 

LinkedList는 list 용도로서 뿐만 아니라, Stack이나 Queue로써도 사용이 가능


 

Reference

https://crazykim2.tistory.com/566
https://inpa.tistory.com/entry/JAVA-%E2%98%95-LinkedList-%EA%B5%AC%EC%A1%B0-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%99%84%EB%B2%BD-%EC%A0%95%EB%B3%B5%ED%95%98%EA%B8%B0