본문 바로가기
카테고리 없음

자바 컬렉션 프레임워크(List, Set, Map) 총정리

by kangs' tong 2023. 12. 1.

자바 컬렉션 프레임워크

컬렉션 프레임워크는 자바에서 제공하는 데이터 구조를 다루는 클래스와 인터페이스의 모임이다. 컬렉션은 데이터를 저장, 검색, 정렬, 수정 등을 할 수 있는 메서드들을 제공하여 효율적인 데이터 관리를 가능하게 한다. 자바 컬렉션 프레임워크는 크게 List, Set, Map으로 구분된다.

  • List: 순서가 있는 데이터의 집합으로, 데이터의 순서(index)를 유지하면서 중복을 허용한다. 대표적인 구현 클래스로는 ArrayList, LinkedList, Vector 등이 있다.
  • Set: 순서가 없는 데이터의 집합으로, 중복되는 데이터를 허용하지 않는다. 대표적인 구현 클래스로는 HashSet, TreeSet 등이 있다.
  • Map: 키-값(Key-Value)의 쌍으로 이루어진 데이터의 집합으로, 키를 기준으로 중복을 허용하지 않는다. 대표적인 구현 클래스로는 HashMap, TreeMap 등이 있다.

List

List는 순서가 있는 데이터의 집합으로, 데이터의 순서(index)를 유지하면서 중복을 허용하는 컬렉션 타입이다. 여러 개의 데이터를 저장하고, 원하는 위치에서 데이터를 추가, 수정, 삭제할 수 있다. 대표적인 List의 구현 클래스로는 다음과 같은 것들이 있다.

ArrayList

ArrayList는 내부적으로 배열을 사용하여 데이터를 저장하며, 크기가 동적으로 조절된다. 배열로 인덱스를 참조하여 데이터에 접근하기 때문에 데이터의 접근이 빠르다. 하지만 데이터의 추가, 삭제에는 시간이 더 걸린다.

LinkedList

LinkedList는 데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 주소를 저장하여 자료를 연결한 형태이다. 데이터의 추가, 삭제가 빠르며 내부적으로는 이중 연결 리스트로 구현되어 있다. 하지만 데이터에 접근하려면 처음부터 순서대로 찾아야 하기 때문에 느리다.

Vector

Vector는 ArrayList와 유사한 구조를 가지고 있으며, 동시성을 지원한다는 점에서 차이가 있다. 여러 개의 스레드가 동시에 컬렉션에 접근하더라도 안전하게 데이터를 처리할 수 있다. 하지만 동시성 처리 때문에 성능이 떨어진다는 단점이 있다.

Set

Set은 순서가 없는 데이터의 집합으로, 동일한 데이터(중복)를 허용하지 않는다. 데이터의 저장 여부를 판단하기 위해 equals() 메서드를 사용한다. 대표적인 Set의 구현 클래스로는 다음과 같은 것들이 있다.

HashSet

HashSet은 해싱(Hashing)을 사용하여 데이터를 저장하는 것으로, 데이터가 특정 인덱스에 저장되기 때문에 순서가 없다. 데이터의 추가, 삭제, 검색에 빠르지만 저장 순서를 유지하지 않는다.

TreeSet

TreeSet은 이진 검색 트리(Binary Search Tree)를 사용하여 데이터를 저장하는 것으로, 데이터가 정렬된 상태로 저장된다. 데이터의 추가, 삭제, 검색에는 느리지만 정렬된 상태로 데이터를 유지해야 할 때 유용하다.

Map

Map은 키-값(Key-Value)의 쌍으로 이루어진 데이터의 집합으로, 키를 기준으로 중복을 허용하지 않는다. 데이터를 검색하거나 변경할 때 키를 사용하여 효율적인 처리가 가능하다. 대표적인 Map의 구현 클래스로는 다음과 같은 것들이 있다.

HashMap

HashMap은 해싱을 사용하여 데이터를 저장한다. 데이터의 순서를 보장하지 않으며, 키와 값이 null일 수 있다. 데이터의 추가, 삭제, 검색에 빠르지만 순서를 유지할 필요가 없는 경우 유용하다.

TreeMap

TreeMap은 이진 검색 트리를 사용하여 데이터를 저장한다. 데이터가 키의 오름차순으로 정렬되며, 키는 null이 될 수 없다. 데이터의 추가, 삭제, 검색에는 느리지만 정렬된 상태로 데이터를 유지해야 할 때 유용하다.


위에서 살펴본 것처럼 자바 컬렉션 프레임워크는 데이터를 효율적으로 관리하기 위해 다양한 클래스와 인터페이스를 제공한다. List, Set, Map을 사용하여 데이터를 저장, 검색, 수정, 정렬 등을 간단하게 처리할 수 있으며, 다양한 상황에 맞게 유연하게 사용할 수 있다.

댓글