ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자바(JAVA)] 컬렉션 프레임웍 /List, Set, HashSet, TreeSet, Map의 정의와 사용메서드 정리
    자바의 정석 2023. 7. 19. 04:16
    728x90

    컬렉션 프레임웍(collections framework)

    컬렉션: 여러 객체(데이터)를 모아둔 것
    프레임웍: 표준화, 정형화된 프로그래밍 방식
    - 프레임웍은 자유도가 떨어진다고 볼 수도 있지만 생산성이 올라가고 유지보수가 더 쉬워진다는 장점이 있음

     

    컬렉션 프레임웍

    - 여러 객체를 정해진대로 프로그래밍 하는것

    - 컬렉션(다수의 객체)를 다루기 위한 표준화된 프로그래밍 방식

    - 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공한다.

    - java.util패키지에 포함되어 있고 JDK1.2부터 제공되었음

     

     

     

    🔷 컬렉션 프레임웍의 핵심 인터페이스

    - 크게 3가지로 나눌 수 있다.

    - 세가지의 특성을 반드시 알고있자!

     

    1) List
    - 순서가 있는 데이터의 집합, 데이터 중복을 허용한다.
    구현클래스: ArrayList, LinkedList, Stack, Vector...
    예) 대기자 명단

    2) Set
    - 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다.
    - 구현클래스: HashSet, TreeSet...
    예) 양의 정수집합, 소수의 집합

    3) Map
    - 키와 값의 쌍으로 이루어진 데이터의 집합
    - 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다
    - 구현클래스: HashMap, TreeMap, Hashtable...
    예) 우편번호(방곡동- xxxxx), 지역 전화번호(서울-02, ... ,)

     

     

     

     

    List와 Set의 공통부분을 뽑아서 "Collection"인터페이스를 정의했다.

    (Map인터페이스는 두가지와는 전혀 다른 형태로 컬렉션을 다루기 때문에 상속계층도에 포함되지 못했다)

     

    컬렉션 프레임웍의 모든 컬렉션 클래스들은 List, Set, Map중 하나를 구현하고 있기 때문에 구현한 인터페이스의 이름만으로도 클래스의 특징을 쉽게 파악할 수 있다.

     

    즉, 내가 다루려는 데이터의 특성에 따라 적절한것을 선택하면 된다.

     

     


    🔷Collection인터페이스의 메서드

     

     

    추가, 검색, 삭제가 기본이다.

     

     

     

     

     


     

     

    🔷 List 인터페이스 (순서ㅇ, 중복ㅇ)

    List인터페이스를 구현한 클래스는 여러개가 있는데

    Vector와 ArrayList는 거의 같음

    다만 Vector는 old하기 때문에 ArrayList를 사용한다고 보면 됨

     

     

     

     

     

     


    🔷 Set인터페이스 (순서x, 중복x)

     

     

     

    HashSet과 TreeSet정도만 알고있어도 무방하다.

     

    📌 HashSet과 TreeSet


    1. 내부 데이터 구조:
    HashSet
    : HashSet은 해시 테이블을 사용하여 요소들을 저장합니다. 해시 테이블은 매우 빠른 검색과 삽입을 제공하지만, 요소들의 순서를 보장하지 않습니다.
    TreeSet
    : TreeSet은 레드-블랙 트리(Red-Black Tree)라는 자료구조를 사용하여 요소들을 저장합니다. 이 자료구조는 자동으로 정렬된 상태를 유지합니다. 따라서 TreeSet은 요소들을 정렬된 순서로 저장하게 됩니다.

    2.정렬:
    HashSet
    : HashSet은 요소들의 순서를 보장하지 않기 때문에 저장 순서와 출력 순서가 일치하지 않을 수 있습니다. 그래서 요소들의 정렬에 대한 보장이 없습니다.
    TreeSet
    : TreeSet은 요소들을 자동으로 정렬된 상태로 유지합니다. 따라서 저장된 요소들은 기본적으로 정렬된 순서로 출력됩니다.
    *(기본정렬-오름차순)

    3.성능:
    HashSet
    : HashSet은 해시 테이블을 사용하여 검색, 삽입, 삭제 연산에서 평균적으로 매우 빠른 성능을 제공합니다. 하지만 해시 충돌이 발생할 수 있으며, 이는 성능 저하로 이어질 수 있습니다.
    TreeSet
    : TreeSet은 레드-블랙 트리를 사용하기 때문에 검색, 삽입, 삭제 연산에서 평균적으로 O(log N)의 시간 복잡도를 가집니다. TreeSet의 성능은 정렬된 상태를 유지하는 데 큰 장점이 있습니다.

    4. 중복 요소:
    HashSet
    : HashSet은 중복된 요소를 허용하지 않습니다. 따라서 동일한 요소를 중복해서 추가하려고 하면 무시됩니다.
    TreeSet
    : TreeSet도 중복된 요소를 허용하지 않습니다. 동일한 요소를 중복해서 추가하면 무시됩니다.

     


    🔷 Map인터페이스 (순서x, 키 중복x, 값 중복ㅇ)

     

    • LinkedHashMap: 원래 HashMap은 순서가 없는데 순서가 필요하다면 LinkedHashMap을 사용하면 된다.
    • Hashtable과 HashMap은 같은데 Hashtable이 옛날버전이다. 동기화에서 차이가 있음(13장 쓰레드에서 설명)
    • 기존에 저장된 데이터와 중볻된 키-값을 저장하면 기존값을 없어지고 마지막값이 저장된다.

     

    구현 클래스의 핵심은 HashMap과 TreeMap이다.

     

     

    • 키와 값의 쌍을 Entry라고 한다.
    • entrySet() : 모든 entry 출력함(순서x, 중복x)
    • Collection values() vs Set keySet() : 값은 중복이 가능하기 때문에 Collection , 키는 중복불가로 Set을 반환한다.

     

    728x90
Designed by Tistory.