본문 바로가기
Java/Java이론

List, Set, Map의 차이점 및 사용 예시

by P_eli 2024. 10. 19.
728x90
반응형

데이터 구조는 프로그램의 성능과 효율성에 큰 영향을 미칩니다. List, Set, Map은 각기 다른 특징을 가지고 있으며, 이들의 차이를 이해하면 상황에 맞는 최적의 선택을 할 수 있습니다.

1. List, Set, Map의 차이점

데이터 구조중복 허용 여부순서 보장 여부주요 사용 케이스

데이터 구조 중복 허용 여부 순서 보장 여부 주요 사용 케이스
List 허용 순서 보장 순서가 중요한 데이터 저장
Set 허용 안함 순서 보장 안됨 (단, LinkedHashSet, TreeSet은 예외) 중복을 제거한 고유 값 저장
Map 키는 중복 안됨, 값은 중복 허용 키에 대한 순서는 보장 안됨 (단, LinkedHashMap, TreeMap은 예외) 키-값 쌍으로 데이터 저장
  • List: 순서가 중요한 경우 사용되며, 중복된 값도 허용됩니다. 예를 들어, 대기열이나 순서를 따져야 하는 데이터들을 저장할 때 사용됩니다.
  • Set: 고유한 데이터만을 저장하고 싶을 때 사용됩니다. 중복을 허용하지 않으며, 데이터의 순서가 중요하지 않은 경우에 유용합니다.
  • Map: 키-값 쌍으로 데이터를 저장하며, 키는 중복되지 않지만 값은 중복이 가능합니다. 각 키에 대한 접근이 빠르고, 특정 키를 통해 값을 얻고자 할 때 주로 사용됩니다.

2. 예제 코드로 보는 List, Set, Map

(1) List 예제

import java.util.ArrayList;
import java.util.List;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("apple");  // 중복 허용

        System.out.println(list);  // [apple, banana, apple]
    }
}

 

  • 특징: 순서가 보장되며, 같은 값이 여러 번 저장될 수 있습니다.

(2) Set 예제

import java.util.HashSet;
import java.util.Set;

public class SetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("apple");
        set.add("banana");
        set.add("apple");  // 중복된 값은 저장되지 않음

        System.out.println(set);  // [apple, banana] (중복된 값 제외)
    }
}
  • 특징: 중복된 값을 저장하지 않으며, 순서는 보장되지 않습니다.

(3) Map 예제

import java.util.HashMap;
import java.util.Map;

public class MapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("apple", 3);  // 키가 중복되면 기존 값이 덮어쓰기됨

        System.out.println(map);  // {apple=3, banana=2}
    }
}

 

  • 특징: 중복된 키를 허용하지 않으며, 키를 통해 값을 저장하고 검색할 수 있습니다.

3. List, Set, Map의 성능 비교

각 컬렉션은 특정 상황에서 더 효율적입니다. 검색, 삽입 및 삭제 작업에서 각각의 성능을 살펴보겠습니다.

(1) List의 성능

  • 검색: O(n) – 순차적으로 탐색해야 하므로 시간이 많이 걸릴 수 있습니다.
  • 삽입: O(1) – 리스트의 끝에 추가할 때 빠릅니다. 그러나 특정 위치에 삽입할 때는 O(n)이 소요됩니다.
  • 삭제: O(n) – 리스트에서 요소를 제거할 때는 해당 요소를 찾는 과정이 필요합니다.

(2) Set의 성능

  • 검색: O(1) – HashSet은 해시 테이블을 사용하여 빠르게 값을 찾을 수 있습니다.
  • 삽입: O(1) – 해시 테이블을 통해 중복을 검사한 후 빠르게 삽입할 수 있습니다.
  • 삭제: O(1) – 검색과 마찬가지로 빠르게 삭제할 수 있습니다.

(3) Map의 성능

  • 검색: O(1) – 키를 통해 값을 직접 접근할 수 있기 때문에 매우 빠릅니다.
  • 삽입: O(1) – 키를 기반으로 값을 저장하기 때문에 삽입 속도가 빠릅니다.
  • 삭제: O(1) – 키로 직접 접근하여 값을 삭제할 수 있습니다.

4. 언제 사용해야 할까?

  • List: 데이터의 순서가 중요한 경우에 사용합니다. 예를 들어, 사용자가 입력한 데이터를 순차적으로 저장해야 할 때 적합합니다.
  • Set: 중복된 데이터를 허용하지 않고 고유한 값들만을 저장해야 할 때 사용합니다. 예를 들어, 회원가입 시 유일한 이메일 주소를 저장할 때 적합합니다.
  • Map: 키-값 쌍을 사용하여 데이터를 저장할 때 유용합니다. 예를 들어, 사전의 단어와 그 정의를 저장할 때 적합합니다.

5. 결론

List, Set, Map은 각기 다른 특징과 장단점을 가지고 있습니다. 특정 상황에 맞는 적절한 데이터 구조를 선택하는 것은 프로그램의 성능과 유지보수에 큰 영향을 미칩니다. 데이터의 중복 허용 여부, 접근 방식, 성능 요구 사항 등을 고려하여 적합한 컬렉션을 선택하는 것이 중요합니다.

요약:

  • List는 순서가 중요하고 중복이 허용될 때 사용.
  • Set은 중복된 값을 허용하지 않으며 순서는 중요하지 않을 때 사용.
  • Map은 키-값 쌍으로 데이터를 저장하고 싶을 때 사용.

이러한 데이터 구조들의 차이점을 잘 이해하고 코드로 적용하면, 다양한 상황에서 더욱 효율적인 프로그램을 작성할 수 있습니다.

728x90
반응형