[Java] 컬렉션 프레임워크_List, Set, Map

SeoYoon·2024년 11월 22일

💗JAVA

목록 보기
21/21
post-thumbnail

1. List

순서O / 중복 O

List는 순서가 있는 데이터의 집합을 표현하며, 중복된 요소를 허용하고 삽입 순서를 유지함

  • 주요 구현 클래스
    1. ArrayList
    - 내부적으로 배열을 사용하여 데이터를 저장
    - 빠른 읽기(랜덤 엑세스)를 지원
    - 삽임 및 삭제는 상대적으로 느림(특히 중간 위치에서)

    2. LinkedList
    - 내부적으로 이중 연결 리스트(Doubly Linked List)를 사용
    - 삽입 및 삭제가 빠름(특히 중간 위치에서)
    - 읽기(랜덤 엑세스)는 느림

    3. Vector
    - ArrayList와 비슷하지만 Thread-Safe
    - 동기화 지원으로 인해 속도가 느림

    * 주요 메서드
    - add(E element) : 요소 추가
    - get(int index) : 특정 인덱스의 요소 반환
    - remove(int index) : 특정 인덱스의 요소 제거
    - size() : 요소 개수 반환


1-2. List 예시 코드


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

public class ListExample {
    public static void main(String[] args) {

        // ArrayList 사용
        List<String> arrayList = new ArrayList<>();
        arrayList.add("Apple");
        arrayList.add("Banana");
        arrayList.add("Apple"); // 중복 허용
        arrayList.add("Cherry");

        System.out.println("ArrayList = " + arrayList);

        // LinkedList 사용
        List<String> linkedList = new LinkedList<>(arrayList); // 기존 리스트 복사
        linkedList.remove("Banana"); // 특정 요소 제거
        System.out.println("LinkedList after removing 'Banana : " + linkedList);

        // 인덱스를 이용한 접근
        System.out.println("Fisrt element in ArrayList : " + arrayList.get(0));
    }
}

2. Set

순서X / 중복 X

Set은 중복되지 않는 데이터의 집합을 표현하며, 데이터의 순서에 대해 보장하지 않거나 특정 순서를 제공하는 구현체도 있음

  • 주요 구현 클래스

    1. HashSet

    - 내부적으로 해시 테이블을 사용
    - 삽입 순서가 유지되지 않음
    - null값 허용(1개만)

    2. LinkedHashSet

    - HashSet과 비슷하지만 삽입 순서를 유지
    - 순서를 보장하며 성능은 HashSet보다 약간 느림

    3. TreeSet

    - 내부적으로 이진 검색 트리(Red-Black-Tree)를 사용
    - 데이터가 자동으로 정렬됨(오름차순 또는 사용자 정의 순서)
    - null값 허용하지 않음

    * 주요 메서드
    - add(E element) : 요소 추가
    - get(int index) : 특정 인덱스의 요소 반환
    - remove(int index) : 특정 인덱스의 요소 제거
    - size() : 요소 개수 반환


2-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("Dog");
        set.add("Cat");
        set.add("Bird");
        set.add("Dog"); // 중복은 허용되지 않음

        // 데이터 출력
        System.out.println("Set 내용 :");
        for (String item : set) {
            System.out.println(item);
        }

        // 특정 요소 확인
        System.out.println("\nSet에 'Cat'이 있나? " + set.contains("Cat"));

        // 요소 삭제
        set.remove("Cat");
        System.out.println("\n'Cat' 삭제 후 : ");
        for (String item : set) {
            System.out.println(item);
        }
    }
}

3. Map

순서X / 중복 (키 X, 값O)

Map은 키-값 쌍(Key-Value-Pair)을 저장하는 데이터 구조를 제공하며, 키는 중복이 허용 되지 않고 값은 중복될 수 있음

  • 주요 구현 클래스

    1. HashMap

    - 내부적으로 해시 테이블을 사용
    - 삽입 순서가 유지되지 않음
    - null키와 다수의 null값 허용

    2. LinkedHashMap

    - HashMap과 비슷하지만 삽입 순서를 유지
    - 순서가 중요한 경우 유용

    3. TreeMap

    - 내부적으로 이진 검색 트리(Red-Black-Tree)를 사용
    - 키가 자동으로 정렬됨(오름차순 또는 사용자 정의 순서)
    - null 키 허용하지 않음

    4. Hashtable

    - HashMap과 비슷하지만 Thread-Safe
    - null키와 값 허용하지 않음

    * 주요 메서드

    - put(K key, V value) : 키-값 쌍 추가
    - get(Object key) : 특정 키에 대한 값 반환
    - remove(Object key) : 특정 키의 키-값 쌍 제거
    - containsKey(Object key) : 특정 키 포함 여부 확인
    - containsValue(Object value) : 특정 값 포함 여부 확인
    - size() : 키-값 쌍의 개수 반환


3-1. Map 예시 코드


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

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

        // 데이터 추가
        map.put(1, "One");
        map.put(2, "Two");
        map.put(3, "three");
        map.put(2, "Duplicate"); // 같은 키는 덮어씌워짐

        // 데이터 출력
        System.out.println("Map 내용 : ");
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            System.out.println("Key : " + entry.getKey() + ", Value : " + entry.getValue());
        }

        // 특정 키의 값 가져오기
        System.out.println("\nKey 2의 값 : " + map.get(2));

        // 요소 삭제
        map.remove(1);
        System.out.println("\nKey 1 삭제 후 : ");
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            System.out.println("Key : " + entry.getKey() + ", Value : " + entry.getValue());
        }
    }
}


* 정리

  • List : 순서가 중요하고, 중복된 데이터를 허용해야 하는 경우
    ex.) 사용자 입력 데이터, 작업 대기열

  • Set : 중복을 제거하고 고유한 데이터만 유지해야 하는 경우
    ex.) 유일한 사용자 ID, 중복 없는 태그

  • Map : 키를 기반으로 데이터를 저장하고 빠르게 검색해야 하는 경우
    ex.) 설정 값 저장, 사용자 정보(키 : 사용자ID, 값 : 사용자 이름)

profile
공부 기록

0개의 댓글