본문 바로가기

자료구조

[리스트] 연결리스트 (LinkedList) in JAVA

연결리스트 (LinkedList)

- in JAVA -



저번 '자료구조'포스팅에서 다룬 연결리스트를 이번에는 자바 환경에서 이용해볼거다.

앞 포스팅에선 C언어로 연결리스트, 각 메소드들을 일일이 구현해줬는데

실무에서나 알고리즘경연대회에서 그렇게 일일이 구현하기에는 시간도 오래 걸릴뿐더러

구현하는 법을 까먹기라도 한다면 큰일나는거다.


그래서 자바나 C++언어에서는 많이 쓰이는 자료구조들 STL을 제공해주는데

오늘은 연결리스트, LinkedList STL을 이용하는 내용을 다루겠다.


그럼 먼저 연결리스트 생성부터 해 볼거다.

1
2
3
4
5
6
7
8
import java.util.LinkedList;
 
public class Main {
 
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<Integer>();
    }
}
cs

LinkedList<넣을 데이터형태> 변수명 = new LinkedList<데이터타입>();

이처럼 연결리스트를 생성한다.

<데이터형태> 에는 Integer, Double, String 등 데이터타입들이 들어갈 수 있다.

또한 연결리스트를 이용하기 위해선 해당 라이브러리도 포함해줘야한다.

import java.util.LinkedList;

< LinkedList 변수 생성해 준 다음 Ctrl + Shift + O 를 눌러 쉽게 import 할 수 있다. />


그리고 연결리스트에는 데이터삽입, 삭제 등 메소드들이 있다.

이러한 기능들의 이용을 다음 예제로 알아보자.

[삽입, add]

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<Integer>();
        
        list.add(10);
        list.add(20);
        list.add(30);
        
        System.out.println(list);
    }
cs

다음과 같이 add를 이용해 데이터들을 추가해 주는게 기본이다.

출력 값

결과는 10, 20, 30 순서대로 삽입된 것을 알 수 있다.

그럼 10과 20사이에 또다른 데이터를 삽입하고 싶다면 어떻게 할까?

다음 예제를 보면

1
2
3
4
5
6
7
8
9
10
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<Integer>();
        
        list.add(10);
        list.add(20);
        list.add(30);
        list.add(115);
        
        System.out.println(list);
    }
cs


바로 add(위치번호, 넣을데이터); 이와 같이 데이터와 데이터 사이에 새로운 데이터를 넣을 수 있다.

근데 왜 위치번호를 1이라고 쓰니까 10과 20사이에 새로운 데이터가 추가되었을까?

그건 바로 위치번호가 몇번이 어디인지를 알면 쉽게 이해할 수 있다.

 

바로 위 그림과 같이 위치번호가 지정되기 때문에 add(1, 15); 일 때 10과 20사이에 새로운값 15를 삽입한 것이다.

위치번호는 배열의 인덱스번호와 굉장히 유사하다고 볼 수 있다.


[삭제, remove]

데이터 삭제는 remove 메소드로 할 수 있다.

바로 예제를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<Integer>();
        
        list.add(10);
        list.add(20);
        list.add(30);
        list.add(115);
        
        list.remove(0);
        
        System.out.println(list);
    }
cs


remove(위치번호); 로 데이터를 삭제할 수 있는데 위 예제의 결과를 보면 알 수 있듯

0번 위치에 있던 데이터 10이 삭제된 것을 알 수 있다.


[참조, get]

다음으로 리스트에서 원하는 위치의 데이터만 가져오는 메소드 get을 알아볼 것이다.

다음 예제를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<Integer>();
        
        list.add(10);
        list.add(20);
        list.add(30);
        list.add(115);
        
        list.remove(0);
        
        System.out.println(list);
        System.out.println(list.get(2));
        System.out.println(list.get(1));
    }
cs


예제를 보면 알 수 있듯 get(위치번호); 로 원하는 위치의 데이터를 가져올 수 있다.


이렇게 자바에서 제공되는 LinkedList STL로 연결리스트를 이용하는 법을 알아봤다.

다음 '자료구조' 포스팅은 제공된 STL을 이용해 구현하는 방법과 LinkedList로 구현하는 2가지 형태의 Stack을 

포스팅해보겠다.