관리 메뉴

JIE0025

[Java] Collection Framework (List, Queue, Set) & Map 본문

개발/Java, Kotlin

[Java] Collection Framework (List, Queue, Set) & Map

Kangjieun11 2023. 5. 6. 16:34
728x90

 

 

복습을 하려고 컬렉션을 내 블로그에서 검색해봤는데, 글을 작성하지 않았나보다.

그래서 이글을 적는다!

 

 

✅ 개요

 

우리는 대학에서 자료구조에 대해 배운다. 

자료구조가 중요한 이유는 어떤 상황에서 어떤 자료구조를 사용해야 효율적일지 아는것에서 프로그램의 효율성이 좋아지기 때문이다.

 

자바에서는 자료구조를 쉽게 다루기 위해 <컬렉션>을 제공한다.

 

컬렉션 : 다수의 요소를 하나의 그룹으로 묶어 효율적으로 저장하고 관리하는데 사용하는 기능을 제공

 

이제 컬렉션 프레임워크의 계층구조를 살펴보자. 어떤 클래스를 상속하고, 구현하는지 관계를 알아보고 각  차이를 알아보자!)

 

 

 

✅ 컬렉션 프레임워크 계층

 

우리가 자바에서 자주 사용하는 ArrayList, LinkedList, HashSet등등.... 모두 여기에서 보인다.

 

 

0️⃣ Iterable 은 반복가능한 이라는 뜻으로, Collection인터페이스가 Iterable 인터페이스를 상속받는다. 

 

 

https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html

 

 

1️⃣ Collection 인터페이스를 상속, 구현받은 객체들은 모두 java.util 패키지 내부에 존재한다.

 

2️⃣ Collection인터페이스를 상속받은, List, Queue, Set 인터페이스가 있다.

 

3️⃣ List, Queue, Set은 각각의 구현체가 존재한다.

 

4️⃣  Map 은 Collection과 별개로 존재한다.  (java.util 패키지 내부에 존재한다)

 

List, Queue, Set의 구현체

⏺ List : 순서가 있는 데이터의 집합

  • ArrayList : 크기가 가변적인 배열로 구현, 인덱스를 이용해 접근 가능, 원소의 삽입 삭제에 더 많은 시간 소요 됨
  • LinkedList : 노드로 연결된 리스트로 구현, 링크를 통해 참조되어 삽입삭제가 빠르다. 
  • Vector  :  ArrayList와 유사한 동작, 동기화되어 스레드 안전성 제공
    (get put에 모두 synchronized가 있어 스레드마다 lock이 걸리고, 성능은 arraylist보다 좋지 못함)
    • Stack : LIFO(LastInFirstOut)의 특성을 가짐, push, pop

 Queue : FIFO(FirstInFirstOut) 를 지키는 자료구조

  • PriorityQueue : 우선순위 큐, 우선순위에 따라 정렬된 순서를 유지 (이진트리로 구현되어있다)
  • Deque : 양쪽 끝에서 삽입 삭제 작업이 가능한 큐
    • LinkedList : 링크드리스트는 Deque인터페이스를 구현하기도 함. 삽입 삭제가 양쪽 끝에서 가능하다.
    • ArrayDeque : 배열로 구현됨.

 Set : 집합, 중복을 허용하지 않는 자료구조 

  • HashSet : 해시테이블을 사용해 구현된 Set, 순서를 유지 하지 않음
  • LinkedHashSet : 해시테이블+연결리스트를 사용해 구현, 삽입순서대로 순서 유지,
  • SortedSet : 자동으로 요소를 정렬해 유지하는 Set인터페이스
    • TreeSet : 이진검색트리를 사용해 구현됨 

 

 

 

✚  Collection을 상속/구현하지는 않는     Map

 

Map은 다음과 같은 특징을 가진다.

  • Set과 같이 순서가 없다.
  • Key값은 중복될 수 없다. 
  • Value는 중복될 수 있다.

 

 Map : key-value로 이루어진 자료구조

  • HashMap :  해시테이블을 사용해 구현된 Map , null키와 값이 모두 허용된다. 키와쌍을 저장, 순서는 유지하지 않는다. 
    일반적으로 가장 많이 사용되는 구현체
  • HashTable : HashMap과 유사, 동기화되어 스레드 안전성을 제공한다. null키와 값 허용되지 않는다. 
  • LinkedHashMap : 해시테이블+연결리스트를 사용해 구현, 삽입된 순서를 유지한다.
  • SortedMap: Key들의 정렬 순서를 유지한다.
    • TreeMap : 이진검색트리를 이용해 구현됨

 

 


 

자료구조 컬렉션 복습 겸 글을 작성해봤는데 

직접 사용하면서 어떤게 더 합리적으로 사용될 수 있는지는 지속적으로 고민해봐야한다.