반응형
Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

지식조각모음

[자료구조] List, Map, Set, Hash 차이 본문

CS

[자료구조] List, Map, Set, Hash 차이

y00 2023. 7. 28. 01:24
반응형

List

  • List는 순서가 있는 데이터의 모음으로, 중복된 값을 포함할 수 있습니다.
  • 인덱스를 사용하여 데이터를 관리하며, 데이터를 순서대로 나열하는 용도로 많이 사용됩니다.
  • Java Interface: ArrayList, LinkedList

Map

  • Map은 Key-Value 쌍으로 데이터를 저장하는 자료구조로, 각 Key는 유일해야 합니다.
  • 위와 같은 이유로 같은 key를 가지고 있다면 중복된 값을 가질 수 없습니다. 
  • 데이터의 순서를 보장하지는 않습니다.
  • Key를 사용하여 데이터에 접근하므로 검색과 관련된 작업에 많이 사용됩니다.
  • Java Interface: HashMap, LinkedHashMap

Set

  • 주로 데이터의 중복을 제거하고 유일한 값을 저장하기 위해 사용됩니다.
  • Java Interface: HashSet, LinkedHashSet

Hash

  • Hash는 해시 함수를 사용하여 데이터를 변환하고 그 결과를 해시 테이블에 저장하는 자료구조입니다. 
    • 해시 함수: 임의의 크기의 데이터를 고정된 크기의 값으로 매핑합니다.
  • 해시 테이블은 Key-Value 쌍으로 데이터를 저장하며, 각 Key는 유일해야 합니다.
  • Java Interface: HashMap, HashSet

 


Set과 Map의 차이

1. 데이터 구성

  • Set: Set은 중복된 값을 허용하지 않는 데이터의 집합입니다. 각 값은 유일해야 하며, 순서가 없습니다.
  • Map: Map은 Key-Value 쌍으로 데이터를 저장하는 자료구조입니다. 각 Key는 유일해야 하며, 중복된 Key는 허용되지 않습니다. Value는 중복되어도 상관없습니다.

2. 값에 대한 접근

  • Set: Set은 값에 대한 접근 방법이 일반적으로 데이터의 유무를 확인하는 것이므로, 데이터를 검색할 때 사용됩니다.
  • Map: Map은 Key를 사용하여 데이터에 접근하는데, 특정 Key를 이용하여 Value를 얻어내는 데 사용됩니다.

3. 내부 구조

  • Set: Set은 주로 해시 테이블(Hash table)을 사용하여 데이터를 저장합니다. 해시 함수를 사용하여 데이터를 고정된 크기의 해시 코드로 변환하고, 이를 기반으로 데이터를 저장하고 검색합니다.
  • Map: Map은 주로 해시 테이블 또는 검색 트리(예: Red-Black Tree)를 사용하여 데이터를 저장합니다. Key를 해시 코드로 변환하여 데이터를 저장하거나, Key 값을 기준으로 정렬하여 저장합니다.

4. 사용 목적

  • Set: 데이터의 중복을 제거하거나, 고유한 값들을 저장하고자 할 때 사용됩니다. 데이터의 순서가 중요하지 않을 때 유용합니다.
  • Map: Key-Value 쌍으로 데이터를 저장하고자 할 때 사용됩니다. 특정 Key를 사용하여 Value를 검색하거나 관리해야 할 때 유용합니다.

5. 예제 코드

백문이 불여일견

Set

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

public class SetExample {
    public static void main(String[] args) {
        Set<String> fruitSet = new HashSet<>();

        // Set에 데이터 추가
        fruitSet.add("Apple");
        fruitSet.add("Banana");
        fruitSet.add("Orange");
        fruitSet.add("Apple"); // 중복된 값이므로 무시됨

        // Set의 크기 출력
        System.out.println("Set의 크기: " + fruitSet.size()); // 출력 결과: 3

        // Set의 모든 데이터 출력
        for (String fruit : fruitSet) {
            System.out.println(fruit);
        }
    }
}

출력 결과:

Set의 크기: 3
Orange
Apple
Banana

Map

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

public class MapExample {
    public static void main(String[] args) {
        Map<String, Integer> ageMap = new HashMap<>();

        // Map에 Key-Value 데이터 추가
        ageMap.put("Alice", 30);
        ageMap.put("Bob", 25);
        ageMap.put("Carol", 28);
        ageMap.put("Bob", 26); // 중복된 Key이므로 값이 갱신됨

        // Map의 크기 출력
        System.out.println("Map의 크기: " + ageMap.size()); // 출력 결과: 3

        // 특정 Key를 사용하여 Value 출력
        System.out.println("Alice의 나이: " + ageMap.get("Alice")); // 출력 결과: 30
        System.out.println("Bob의 나이: " + ageMap.get("Bob")); // 출력 결과: 26

        // Map의 모든 Key와 Value 출력
        for (Map.Entry<String, Integer> entry : ageMap.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

출력 결과:

Map의 크기: 3
Alice의 나이: 30
Bob의 나이: 26
Alice: 30
Carol: 28
Bob: 26

 


🧐 더 공부할 내용: 해시, 해시 테이블, 해시 함수, Map과 Set의 내부구조

반응형

'CS' 카테고리의 다른 글

array VS list  (1) 2022.02.24