Programming Languages/Java

[JAVA/자료구조] 자바 연결리스트 사용법 (Linked List) 구현 / 예제 정리

Hannana. 2023. 5. 23. 16:09
반응형

▷ 연결 리스트 (Linked List)란?

연결 리스트(Linked List)는 연결 리스트, 링크드 리스트는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다. 

연결 리스트에서 수행되는 작업은 값 추가, 삭제, 검색 등이 있다.
자세한 구현 방법은 아래 글을 통해 소개하겠다.

 

 

 

먼저 연결리스트의 개념에 대해 정리한 글은 다음과 같다.

자료 구조의 기본인 배열과 연결 리스트의 장단점과 차이점 등을 정리한 글이다.

(언어와는 상관 없이 기본 개념을 참고하기 좋은 글이니 참고하도록 하자.)

 

 

[C언어/자료구조] 포인터 - 연결 리스트(Linked List) / 배열과 차이점 / 개념 정리

오늘은 C언어의 자료 표현 방식 중 '포인터와 연결 리스트(Linked List)' 에 대해 알아보고자 한다. 연결 리스트는 링크(link)를 이용해 표현한 리스트이다. 연결 리스트는 배열의 한계를 극복한 표현

hansjour.tistory.com

 

 

이번에는 C언어에 이어 자바로 연결 리스트를 구현하는 방법을 소개하고자 한다.

기본적인 개념은 동일하나 언어에 따라 구현하는 방법은 조금 차이가 있다.

크게 주솟값과 value를 담은 각 노드가 있고

연결 리스트는 노드를 연결한 리스트 구조라고 보면 된다.

 

 

 

▷ 자바에서 연결 리스트(Linked List) 를 어떻게 쓰나?

자바에서 연결 리스트를 수행하는 대표적인 메소드를 살펴보자.

 

 

1) LinkedList 선언

import java.util.linkedlist  <- import는 기본이다.

LinkedList list = new LinkedList(); //타입을 정하지 않으면 Object로 자동 지정
LinkedList<Person> people = new LinkedList<Person>();//People 객체로 구성
LinkedList<Integer> intList = new LinkedList<Integer>();//int타입으로 구성

 

 

 

2) 추가  : add

//(1) Interger로 구성 된 연결리스트
LinkedList<Integer> list = new LinkedList<Integer>();
list.addFirst(1);//데이터 추가 at first => 데이터의 첫 번째 값을 가리키는 헤더가 변경됨
list.addLast(2);//데이터 추가 at last
list.add(3);//데이터 추가
list.add(1, 3);//index 1에 데이터 3 추가

//(2) 사용자 정의 객체로 구성 된 연결리스트
LinkedList<Person> people = new LinkedList<Person>();
Person person = new Person(name,hobby); 
people.add(person);
people.add(new Person("유재석","신문 보기")); //바로 추가

 

 

 

3) 삭제 : remove

LinkedList<Integer> list = new LinkedList<Integer>(Arrays.asList(1,2,3,4,5));
list.removeFirst();
list.removeLast();
list.remove(); //값 생략시 index 0 
list.remove(1); //index 1 제거
list.clear();

 

 

 

4) 조회 : get 혹은 next()

//방법1
LinkedList<Integer> list = new LinkedList<Integer>(Arrays.asList(1,2,3));

System.out.println(list.get(0)); //index 0
				
for(Integer i : list) {
    System.out.println(i);
}


//방법2
Iterator<Integer> iter = list.iterator(); //Iterator 선언 
while(iter.hasNext()){//iter.hasNext() => 다음 값이 있으면 1, 없으면 0 반환
    System.out.println(iter.next()); //next() 함수를 통해 다음 값 가리킴
}


//방법3 : 단순히 있는지 확인만 하기 (return true/false)
list.contains(value); //값 존재 여부 확인
list.indexOf(value); //값 인덱스 위치 확인, 값이 없다면 -1 return

 

.next() 함수를 사용하여 값을 출력하려면 Iterator 선언이 선행되어야 한다.

파이썬에서는 배열이나 리스트를 조회할 때 간단히 조회가 가능한데

자바에서는 간단히 확인하는 것도 최소한 for문을 짜야 해서 번거로움이 좀 있다.

 

 

 

다음은 예시를 모은 것이다.

 

//[연결리스트 선언]
LinkedList list = new LinkedList(); //타입을 정하지 않으면 Object로 자동 지정
LinkedList<Person> people = new LinkedList<Person>();//People 객체로 구성
LinkedList<Integer> intList = new LinkedList<Integer>();//int타입으로 구성


//[연결리스트 데이터 추가]
//(1) Interger로 구성 된 연결리스트
LinkedList<Integer> list = new LinkedList<Integer>();
list.addFirst(1);//데이터 추가 at first => 데이터의 첫 번째 값을 가리키는 헤더가 변경됨
list.addLast(2);//데이터 추가 at last
list.add(3);//데이터 추가
list.add(1, 3);//index 1에 데이터 3 추가

//(2) 사용자 정의 객체로 구성 된 연결리스트
LinkedList<Person> people = new LinkedList<Person>();
Person person = new Person(name,hobby); 
people.add(person);
people.add(new Person("유재석","신문 보기")); //바로 추가



//[연결리스트 데이터 삭제]
LinkedList<Integer> list = new LinkedList<Integer>(Arrays.asList(1,2,3,4,5));
list.removeFirst();
list.removeLast();
list.remove(); //값 생략시 index 0 
list.remove(1); //index 1 제거
list.clear();


//[연결리스트 데이터 조회]
//방법1
LinkedList<Integer> list = new LinkedList<Integer>(Arrays.asList(1,2,3));

System.out.println(list.get(0)); //index 0
				
for(Integer i : list) {
    System.out.println(i);
}


//방법2
Iterator<Integer> iter = list.iterator(); //Iterator 선언 
while(iter.hasNext()){//iter.hasNext() => 다음 값이 있으면 1, 없으면 0 반환
    System.out.println(iter.next()); //next() 함수를 통해 다음 값 가리킴
}



//방법3 : 단순히 있는지 확인만 하기 (return true/false)
list.contains(value); //값 존재 여부 확인
list.indexOf(value); //값 인덱스 위치 확인, 값이 없다면 -1 return

 

 

 


 

자바에서 중요한 연결 자료 구조이니 

기본 개념과 더불어 사용법을 익혀두면 좋을 것 같다.

 

 

 

 

참고문서  -  https://ko.wikipedia.org/wiki/%EC%97%B0%EA%B2%B0_%EB%A6%AC%EC%8A%A4%ED%8A%B8 

 

반응형