Collection Framework

kangking·2024년 6월 3일

Java

목록 보기
6/10

Collection

프로그래밍에서 자주 사용하는 자료구조(리스트, 맵, 스택, 큐 등)를 자바에서 미리 정의해둔 클래스들

인터페이스와 다형성을 이용했기 때문에 내부 메서드가 비슷한 경향이 있다.

  • 자료구조란 데이터를 저장하는 방식의 차이이다.

  • 컬렉션의 상속 계층표는 아래와 같다.

Collection 공통 메서드

  • add(): 컬렉션에 값 저장
  • remove(): 컬렉션에서 값 제거
  • size(): 현재 저장된 데이터의 크기
  • contains(): 데이터 포함여부 판단
  • isEmpty(): 컬렉션의 데이터 유무 판단
  • iterator(): 반복자, hasNext()메서드로 다음 데이터 여부 판단 후 값을 하나씩 가져온다. -> for each문에서 사용한다.

1. ArrayList

내부적으로 배열을 사용해서 데이터를 저장하기 때문에 배열의 특징을 일부 가지고 있다.

  • 특징
    • 배열과 마찬가지로 처음에 만들 때는 크기가 정해져있지만, 추가 공간이 필요하면 공간을 늘릴 수 있다. (가변 길이 배열)

    • ArrayList는 배열이 꽉차면 더 큰 배열을 만들어서 기존 배열의 값을 옮겨 담는다.

    • 저장된 데이터의 크기: size

    • 실제 내부 데이터 저장공간 크기: capacity, default: 10

  • 장점
    • 조회가 빠르다(Index로 바로 접근)

    • 저장순서 유지

    • 중복 가능
  • 단점
    • 삽입, 삭제가 느리다(중간 값이 바뀌면 배열 내부 정리 필요)

    • 스레드 세이프 하지 않다(동기화 안됨) -> 성능저하

2. HashMap

Map

키 : 밸류 한 쌍으로 데이터를 저장하는 자료 구조

HashMap

Map을 상속받아 구현한 것으로, 키:밸류를 매칭하는 알고리즘으로 Hashing을 사용한다.

  • 특징
    • 값을 가져올 땐 키로 호출하여 가져온다.

    • 기존 키에 새로운 밸류를 넣으면 덮어쓰기가 된다.

Json

Javascript Object Notation의 약자로, List와 Map을 사용하여 데이터를 주고 받는 하나의 포맷

  • Json 형태의 문자열에서 {}는 Map, []는 List형태로 받을 수 있다.

  • 스프링을 사용하면 내부적으로 Jackson 라이브러리를 통해 쉽게 Object로 바꿀 수 있다.

3. HashSet

Set

중복이 없는 리스트 형태

  • Map에서 사용하는 keySet()메소드가 대표적인 Set의 형태인데, keySet()은 Map에 있는 key값은 중복이 없기 때문에 List로 가져오지 않고 Set으로 가져오는 것이다.

Stack

LIFO 구조, 나중에 넣은 데이터가 먼저 나오는 구조이다
메모리 중 일부가 Stack 구조로 동작(메소드 호출, 함수 호출)

Queue

FIFO 구조, 처음에 넣은 데이터가 제일 먼저 나오는 구조
작업 목록등에 사용, 코드보다는 개념이 중요하다.

PriorityQueue

우선순위 큐, 저장 시 우선순위를 부여해서 정렬 후 저장하여 우선순위대로 내보낸다

LinkedList

List 와 Queue를 모두 상속받았기 때문에 두 가지 기능 모두 사용 가능한 자료구조이다.

데이터의 중간에 삽입, 삭제할 때 성능이 좋다

자바에서는 양방향 연결 리스트 형태로 되어있다.

Vector & HashTable

Vector는 ArrayList, HashTable은 HashMap의 구버전 자료구조이다.

잘 사용하진 않지만 둘 다 멀티 스레드 환경에서 synchronized를 제공하는데, Synchronized가 되어있어도 ArrayLisr가 더 성능이 좋다.

profile
하루하루 의미있게

1개의 댓글

comment-user-thumbnail
2024년 6월 4일

와우..

답글 달기