Java/자바기본개념

List와 Map의 차이

유호야 2021. 6. 27. 21:07
반응형

List와 map의 공통점은 데이터를 저장하는 자료구조인 점입니다.

하지만 똑같이 데이터를 저장하지만, 데이터를 저장하는 구조는 다릅니다.

1. LIST

List는 Memory 안의 특정한 동일 공간에 뭉텅이로 저장됩니다.

내부구현은 배열로 되어있기 때문입니다. 때문에 알맞은 데이터 저장공간만 있다면 데이터 저장속도는 빠릅니다.

또한, 순차적으로 데이터를 저장하므로, 데이터 특징이 포지션별로 의미가 있을 때 사용하는 것이 좋습니다.

아래는 자바로 작성한 예시입니다.

List와 Map의 프로그래밍적으로 개념은 같기 때문에 어떤 언어든간에 똑같이 이해하면 됩니다!

foreach문을 썼지만, 일반 for문으로 arrayList.get(position);메서더를 써도 무방 합니다.

package Ex01;

import java.util.ArrayList;

public class ListAndMap {
	public static void main(String[] args) {
		
		ArrayList<String> arrayList = new ArrayList<>();
		
		arrayList.add("0번 아이템 입니다.");
		arrayList.add("1번 아이템 입니다.");
		arrayList.add("2번 아이템 입니다.");
		arrayList.add("3번 아이템 입니다.");
		arrayList.add("4번 아이템 입니다.");
		arrayList.add("5번 아이템 입니다.");
		
		int index = 0;
		for(String templtem : arrayList) {
			System.out.println((index++)+"번 : "+templtem);
		}
	}
	
}

데이터가 6개 필요하므로 배열의 크기가 6을 충족하는 메모리 공간만 있으면 그곳에 배열자체를 저장합니다.

consol출력처럼 포지션별로 의미가 있을 때 유리 합니다.

예를 들어 쇼핑몰 페이지에서 쇼밍몰 아이템들을 화면에 나열한다고 생각해보면,

단순히 저장된 아이템 전부를 화면에 나열할 필요가 있으므로 순차적으로 저장된 데이터를 순차적으로 화면에 배치시키면 되는 것 입니다. 이러한 경우는 ArrayList가 좋습니다. 

하지만 ArrayList안에 있는 데이터를 삽입 삭제가 빈번할 때, 비효율적인 경우가 있습니다.

추가는 단순히 ArrayList내부배열의 크기를 바꾸고 기존 배열의 데이터를 추가하는데 그치지만, 원하는 포지션(index)의 삽입 삭제는 이야기가 다릅니다. 

삽입 / 삭제는 해당 포지션 아래의 데이터들을 Copy해야 합니다.(새로운 배열을 만든후, 기존배열의 값을 포지션별로 다시 채워야 합니다..)

 

기존 배열의 크기를 늘린후 삽입/삭제 데이터를 처리하고 Copy된 데이터를 다시 붙입니다. 따라서 ArrayList의 size가 큰 경우는 많은 양의 요소들을 Copy해야 하므로 내부적으로 성능이 떨어 질 수 있는 것입니다.

정리 하자면 ArrayList는 아이텝의 빈번한 변경없이, 데이터를 순차적으로 받고, 특정데이터가 아닌 원하는 데이터 범위를 순차적으로 표현할 때 유리한 자료 구조라고 볼 수 있습니다.

 

2. MAP

Map은 List완 다릅니다.

Map을 이용해 저장할때는 List처럼 뭉텅이로 저장하는 것이 아니라, Map에 아이템을 저장할때마다, 빈공간을 찾아 저장합니다.

따라서 List보다는 데이터 저장속도가 느릴 수 있습니다. Map의 가장 큰 특징이라면, 쌍을 이루는 Key와 Value값을 이용한다는 것입니다.

따라서 단순히 포지션(0~10같은 인덱션)보다는, 저장하고 싶은 데이터가 특별한 Key값을 가질 때 map을 사용하는 것이 좋습니다.

아래의 예시는 자바언어로 작성했습니다

package Ex01;

import java.util.HashMap;

public class ListAndMap {
	public static void main(String[] args) {
		
		HashMap<String,String> hashmap = new HashMap<>();
		hashmap.put("Key1", "키값이 key1인 Value 입니다.");
		hashmap.put("Key2", "키값이 key2인 Value 입니다.");
		hashmap.put("Key3", "키값이 key3인 Value 입니다.");
		hashmap.put("Key4", "키값이 key4인 Value 입니다.");
		hashmap.put("Key5", "키값이 key5인 Value 입니다.");
		
		System.out.println(hashmap.get("Key1"));
		System.out.println(hashmap.get("Key2"));
		System.out.println(hashmap.get("Key3"));
		System.out.println(hashmap.get("Key4"));
		System.out.println(hashmap.get("Key5"));
		
	}
	
}

 

만약 동일한 Key값을 사용하면 기존의 Key값을 가지고 있는 value가 사라지고 후에 저장한 value값이 셋팅됩니다. key만 다르다면 value값이 중복되도 상관없습니다.

Map은 콘솔에 찍힌것과 같이 Key값이 의미가 있을 때 좋은 자료구조입니다.

ArrayList안에 원하는 데이터를 검색하는 경우에는 0번부터 해당데이터가 있을 때까지 검색을 해야하지만, (원하는 데이터의 index를 모르는 경우) hashMap의 경우는 key값을 통해서 빠르게 데이터를 검색합니다.

요소의 추가 삭제는 List보다 성능이 나을때가 많습니다. 따라서, 검색성능은 기본적으로 Map이 좋습니다.

정리하자면 Map은 빈번한 검색과, 범위데이터가 아닌 특정데이터를 순간마다 캐치해야할 때 유리한 자료구조 입니다.

 

3. 정리

List 수집의 순서가 있으며, 동일한 데이터의 중복 입력 가능.
ArrayList 단순이 데이터를 입력하고 데이터를 출력하는 용도로 사용
Map Key & Value의 형태로 입력이 되며, 키값을 입력하면 해당하는 value값을 획득. 수집의 순서를 기억하지 않고, 동일한 데이터를 Key값으로 사용 할 수 없다.(동일한 Key값으로 다른 데이터의 입력 불가능)


다건의 데이터에서 원하는 특정 데이터에 접근(검색)할 때 유리한 방식
HashMap key값으로 HashMap에 있는 데이터를 검색해서 사용하는 용도로 많이 쓰임

 

 

출처 : https://s205203.tistory.com/25

반응형