Java

[Java] 컬렉션 프레임워크

이덩우 2024. 1. 2. 18:55

컬렉션 프레임워크란?

컬렉션 프레임워크는 자바 프로그래밍에서 중요한 요소 중 하나이다.

자주 사용하는 다양한 자료구조를 자바에서 쉽게 사용할 수 있도록 구현한 *이름 그대로 모음집*, 즉 컬렉션이라고 생각하면 된다.

컬렉션 프레임워크가 왜 생겨났을까?

JDK 1.2 이전에는 Vector, Properties, Stack, HashTable, Dictionary 와 같은 클래스를 사용했는데 이들은 각각 사용법에 대한 통일성이 없었기 때문에 다루기 어려웠다.

자바는 *다형성*을 활용해 보다 통일된 사용법으로 다양한 자료구조를 제공하고자 컬렉션 프레임워크를 만들었다.

컬렉션 프레임워크가 도입되면서 데이터 삽입, 탐색, 정렬 등 편리한 API를 제공받아 사용할 수 있게 되었다.

 

 


구조도

구조도

 

 


언제 무엇을 사용하는게 적합할까?

본 포스팅에서는 List, Set, Map 등의 API에 대한 기본적인 사용법보다는 언제 어떤 자료구조를 선택해야 좋을지 알아보고자 한다.

 

  • ArrayList
    • 리스트 자료구조가 필요하다면 기본적으로 선택
    • 임의의 요소에 대한 접근성이 뛰어남
    • 순차적인 요소의 추가, 삭제가 제일 빠름
    • 임의의 요소에 대한 추가, 삭제가 느림
  • LinkedList
    • 임의의 요소에 대한 추가, 삭제가 ArrayList 보다 유리
    • 대신 임의의 요소에 대한 접근성이 좋지 않음
  • HashSet, HashMap
    • 해싱을 이용하기 떄문에 임의의 요소에 대한 추가, 삭제, 검색, 접근성 모두 뛰어남
    • 검색에 있어서 최고의 성능을 보임 -> get() 메서드의 성능이 시간 복잡도 O(1)
  • ArrayDeque
    • 스택으로 사용할 때는 Stack보다 빠름
    • 대기열로 사용할 때는 LinkedList보다 빠름
    • 따라서 Stack, Queue가 필요하다면 ArrayDeque를 사용하는 것이 권장됨 (공식 문서에서 이야기함)
    • 하지만 Thread-safe 하지 않기때문에, 멀티스레드 환경에서는 synchronized를 이용해 ArrayDeque를 구현해야한다.

 


출처

https://inpa.tistory.com/entry/JCF-%F0%9F%A7%B1-Collections-Framework-%EC%A2%85%EB%A5%98-%EC%B4%9D%EC%A0%95%EB%A6%AC