컬렉션 프레임워크

안승수·2023년 2월 4일
0

Java

목록 보기
8/8
post-thumbnail

앞서 배열을 다룰 때, 동일 타입의 데이터를 연속된 메모리 공간에서 관리한다고 했다.(동형집합)
객체지향의 특징에서 다뤘던 다형성에서는 부모 타입으로 자식 객체를 참조할 수 있다고 했다.(이형집합)

다만, 배열은 immutable하기 때문에 한번 선언된 크기를 변경할 수는 없다는 단점이 있다.

이러한 문제점을 해결하기 위해 Collection Framework을 통해 Java가 제공하는 자료구조를 사용한다.

Iterable <- Collection을 상속받는 List,Set과 독립적인 Map 인터페이스가 존재한다.

List <- Stack,ArrayList,LinkedList

  • 순서가 있는 데이터(index)
  • 데이터의 중복을 허용한다.
  • add,get,contains

Set <- HashSet,TreeSet

  • 순서가 보장되지 않는 데이터
  • 데이터의 중복을 불허한다.

Map <- HashMap,TreeMap

  • key:value 쌍의 형태의 데이터
  • key는 중복을 허용하지 않는다.
  • value는 중복이 가능하다.
  • containsKey,get

ArrayList VS LinkedList

이 둘의 가장 큰 차이점은 배열 기반인지, 노드 기반인지로 나눌 수 있다.
즉 ArrayList는 내부적으로 Object 배열을 사용하기 때문에 배열의 단점(삽입,삭제)가 그대로 존재한다.
LinkedList는 이러한 물리적 연속성의 한계를 극복하기 위해 링크 기반의 논리적 연결관계로 List를 구현했다.

ArrayList

  • 순차 자료구조
  • 인덱스 기반 탐색,수정 용이
  • 데이터의 추가,삭제는 불리(밀고,당기는 작업이 발생함)
  • Stack

LinkedList

  • 비순차 자료구조
  • 데이터의 추가,삭제는 용이(앞 뒤 노드만 신경쓰면 된다)
  • 데이터 탐색은 불리(맨 처음,맨 뒤부터 모두 확인해야함)
  • Queue

Stack VS Queue

Stack은 후입선출(LIFO)구조로 데이터의 삽입,삭제,탐색의 위치가 같다.(last)
Queue는 선입선출(FIFO)구조로 데이터의 삽입되는 위치와 삭제,탐색의 위치가 다르다.

Stack의 대표적인 기능

  • push(T)
  • pop()
  • peek()
  • size()
  • isEmpty()

Queue의 대표적인 기능

  • offer(T)
  • poll()
  • peek()
  • size()
  • isEmpty()

PriorityQueue -> heap

일반적인 Queue는 선입선출의 방식을 따르지만, 우선순위 큐는 비교기준자(Comparator,Comparable)에 의해 우선순위가 결정되어 해당 순위대로 꺼낸다.

Compartor, Comparable

  • int compare(T t1, T t2)
  • int compareTo(T t)

두 객체가 같으면 0, 비교값보다 작으면 음수, 비교값보다 크면 양수를 반환해야 한다.

두 객체가 같다? equals && hashcode

  • equals : 어느 범위까지 같다고 판별할지
  • hashcode : 유일성을 보장하지는 않지만 Objects.hash(...)

HashSet

  • 중복된 요소 허용X (false를 리턴하고 저장하지 않음)

TreeSet

  • 내부적으로 BST로 구현
  • 중복 불허 + 정렬
  • 객체를 저장한다면 비교 기준이 필요함
  • 데이터의 추가,삭제에는 정렬이 동반되어 느리다.
  • 검색과 정렬기능이 뛰어나다.

HashMap

  • key : value
  • 해싱을 사용하여 대용량 데이터의 검색시 유리
  • get,put

TreeMap

  • 범위검색과 정렬에 적합
profile
To be FullStack Developer

0개의 댓글