3. JAVA - 컬렉션(Collection)

hsso_o·2024년 7월 11일
0

스터디

목록 보기
15/44

컬렉션(Collection)

  • 많은 데이터들을 효과적으로 처리할 수 있는 방법을 제공하는 클래스들의 집합
    • 자료구조 + 제네릭
  • 사용 이유
    • 일관된 API
      • Collection 에서 제공하는 규격화된 메소드를 사용함으로 일관된 사용과 유지보수가 가능
    • 이미 제공된 자료구조 활용으로 프로그래밍 비용 감소
    • 프로그래밍 속도 및 품질 향상

  • Collection 인터페이스는 List, Set, Queue 로 크게 3가지 상위 인터페이스로 분류가 된다.

  • List와 Set, Queue는 Collection 인터페이스를 상속 받지만, 구조 상의 이유로 Map은 따로 구현되어 있다.

  • 주요 인터페이스 특징

    인터페이스설명구현 클래스
    List순서가 있는 데이터의 집합으로, 데이터의 중복을 허용한다.ArrayList, LinkedList, Stack, Queue, Vector
    Set순서가 없는 데이터의 집합으로, 데이터 중복 허용하지 않는다.HashSet, TreeSet
    Map<K, V>               키와 값이 쌍를 이루어 구성되는 데이터 집합으로 순서가 없다. 키의 중복은 허용되지 않지만, 값의 중복은 허용된다.HashMap, TreeMap, Properties

List

  • 순서가 있는 데이터 집합, 같은 데이터의 중복 저장 허용
  • ArrayList, LinkedList, Vector, Stack
  • 특징
    • List 인터페이스를 구현한 모든 클래스는 저장 순서 유지
    • 중복 저장 허용

ArrayList

  • 자바에서 제공하는 기본 배열보다 느릴 수 있지만 동적 배열 구현
  • 특징
    • 인스턴스를 생성하게 되면 내부적으로 10칸짜리 배열을 생성해서 관리
    • 크기 변경, 요소 추가/삭제/정렬 기능들을 메소드로 제공 -> 배열 단점 보완
    • 자동적으로 수행되는 것이지 속도가 빨라지는 것은 아니다.
    • 스레드간 동기화가 지원되지 않는다. 따라서 다수의 스레드가 동시에 접근하여 데이터를 조작하게 될 경우 데이터 훼손이 일어날 수 있다.
    • 인덱스로 데이터에 접근할 수 있기 때문에 조회 기능적으로 뛰어나다.

LinkedList

  • ArrayList 클래스가 배열과 유사하게 데이터를 저장함으로써 발생하는 단점을 보완하기 위해 고안

  • 기능적으로는 ArrayList와 다르지 않지만, 내부적으로 연결 리스트(Linked List)를 이용해 데이터를 저장

  • 특징

    • 저장되는 데이터들이 연속된 공간에 저장되는 것이 아니라 각 데이터를 링크(Link)를 연결하여 구성
    • 데이터의 삽입, 삭제가 빈번할 경우 연결되는 링크 정보만 수정하면 되기 때문에 ArrayList보다 더 적합
    • 스택, 큐, 양방향 큐 등을 구성하기 용이
  • 단일 연결 리스트

    : 요소의 저장과 삭제 시 다음 요소를 가리키는 참조 링크만 변경

  • 이중 연결 리스트

    : 이전 요소도 링크하여 이전 요소로 접근하기 쉽게 고안된 자료구조

Stack

  • 제일 나중에 들어간 데이터가 가장 먼저 나오는 구조(후입선출)
  • 특징
    • LIFO(Last In First Out) 구조
    • 메소드가 호출될 때 해당 구조로 메모리에 올라감

Queue

  • 가장 먼저 들어간 데이터가 먼저 나오는 구조(선입선출)
  • 특징
    • FIFO(First In First Out) 구조
    • Front와 Rear을 정하고 한 곳에서는 삭제, 한 곳에서는 삽입 연산만 처리
    • Queue 인터페이스를 상속받는 하위 인터페이스들은 다양하지만 대부분의 큐는 LinkedList를 이용

Set

  • 순서가 없고, 집합처럼 중복되지 않는 데이터를 저장하는 자료구조
  • TreeSet, HashSet, LinkedHashSet 등
  • 특징
    • 순서 X
    • 중복 저장 허용X

HashSet

  • 해시테이블을 이용하여 데이터를 저장하는 구조
  • set의 특징을 가지고 있으며 중복된 값 저장X, 순서 관리X
  • 특징
    • 해시테이블 구조를 이용한 HashMap을 이용하여 만들어져 있음
      • 맵의 특성 중, 중복 키 값이 있을 수 없다는 것을 계승
    • 키 값을 이용해 데이터 저장 및 접근
    • 삽입 삭제가 빈번한 경우 사용 가능

LinkedHashSet

  • HashSet과 동일한 구조를 가지지만 HashSet과는 다르게 데이터를 삽입한 순서대로 출력

TreeSet

  • HashSet과 비슷한 구조를 가지기 때문에 중복 데이터를 저장하지 않고 저장 순서를 유지하지 않음
  • 특징
    • 데이터가 정렬된 상태로 저장되는 이진 검색 트리의 형태로 요소 저장
      • 이진 검색 트리는 데이터 추가 및 제거 등의 기본 동작 시간이 매우 빠름
    • Set 인터페이스가 가지는 특징을 그대로 가지지만 정렬된 상태를 유지한다는 것이 다른 점

Map

  • 키와 값을 하나의 쌍으로 저장하는 자료구조
    • 키는 실제 데이터를 찾기 위한 역할
  • Collection 인터페이스와는 다른 저장 방식
  • HashMap, HashTable, TreeMap

HashMap

  • 가장 자주 쓰이는 클래스
  • Key-Value 쌍으로 데이터를 저장
  • 다양한 value를 가질 수 있지만 Key는 중복 불가
  • 특징
    • 저장은 느리지만, 해시 함수를 이용해 해시 테이블에 저장하기 때문에 검색 측면에서 뛰어남
    • key 중복 불가, value 중복 가능
    • 중복된 키 값에 값 저장 시, 기존 값에 새로운 값 덮어씌움

Properties

  • Hashtable 상속 받아 구현
    • (Object, Object) 의 형태로 저장하는 해시 테이블과 달리 (String, String) 형태로 저장
  • 주로 환경 설정과 관련된 속성을 저장하는데 사용
  • 특징
    • 프로그램 환경 설정과 관련된 데이터를 읽어올 때 주로 사용
    • Key, Value 모두 String이어서 제네릭 불필요
profile
아뇨 소혠데요-

0개의 댓글