CS/Java

Collection Framework

leah-only 2025. 4. 28. 14:16

📁 Java Collection Framework

쉽게 말해서 자료 구조 종류의 형태들을 자바 클래스로 구현한 모음집이라고 보면 된다.

데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓았기 때문에 자바 개발자는 그냥 인스턴스화만 하면 사용 가능하다.

 

👍🏻 장점

  • 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있기 때문에 편리하고 재사용성이 높다.

🗃️ 종류

 

크게 Collection 인터페이스와 Map 인터페이스로 나뉜다. 


Collection 인터페이스 

List, Queue, Set에 상속을 하는 최상위 컬렉션 타입

업캐스팅으로 다양한 종류의 컬렉션 자료형을 받아 자료를 삽입, 삭제, 탐색 기능을 할 수 있다. (다형성)

 

List 인터페이스

  • 순서를 가지고 같은 객체의 중복 저장이 가능하다.
  • 배열과 같이 index로 요소에 접근한다. 
  • 배열과 가장 큰 차이는 '가변'이다. 자료형 크기가 고정이 아닌 동적인 크기를 가진다. 
  • 요소 사이의 빈공간을 허용하지 X → 삽입/삭제할 때마다 배열 이동이 일어난다. 

1️⃣ ArrayList

  • 배열을 이용하여 만든 클래스
  • 단방향 포인터 구조로 순차적 접근에 있어 조회가 빠르다. 
  • 삽입/삭제 느림 but 순차적으로 추가/삭제 경우 가장 빠르다. 

2️⃣ LinkedList 

  • 노드를 연결하여 리스트처럼 만든 클래스 (배열이 X)
  • 데이터의 중간 삽입, 삭제 경우 빠른 성능
  • 양방향 포인터 구조
  • 임의의 요소에 대한 접근은 성능이 좋지 않음

3️⃣ Vector 

  • ArrayList의 구형 버전
  • ArrayList와의 차이 : 모든 메소드가 동기화되어 있어 Thread-safe 하다는 점

4️⃣ Stack

  • 후입선출 LIFO(Last-In-First-Out) 자료구조
  • 들어올 때 : push / 나갈 때 : pop 
  • Stack은 Vector를 상속하기 때문에 잘 안쓰인다. (대신 ArrayDeque 사용)

Queue 인터페이스 

 

  • 선입선출 FIFO (First-In-First-Out) 자료구조

1️⃣ PriorityQueue

  • 우선순위 큐
  • 우선순위를 부여하여 높은 순으로 정렬되고 꺼낸다. 
  • 우선순위 큐에 저장할 객체는 필수적으로 Comparable 인터페이스를 구현해야 한다. compareTo() 메서드 로직에 따라 객체의 우선순위를 결정하기 때문이다. 
  • 저장 공간으로는 배열을 사용하며, 각 요소를 힙(heap) 형태로 저장한다.
  • null 저장 불가능 

2️⃣ Deque

  • 양쪽으로 넣고 빼는 것이 가능한 큐
  • 스택 + 큐 형태로 스택으로 사용할 수 있고 큐로 사용 가능하다.
  • 구현체로 ArrayDeque와 LinkedList 등이 있다. 

ArrayDeque

 


Set 인터페이스 

  • 중복을 허용하지 않고 순서를 유지하지 않는 데이터 집합 리스트
  • 순서 자체가 없어 인덱스로 객체를 검색해서 가져오는 get(index) 메서드도 존재하지 X
  • 중복 저장이 불가능하기 때문에 null 값도 하나만 저장 가능

💡헷갈렸던 메소드 정리 

메서드 설명
boolean add(E e) 주어진 객체 저장 후 성공시 true, 중복 객체면 false 리턴
Iterator<E> iterator() 저장된 객체를 한번씩 가져오는 반복자를 return
void clear() 저장된 모든 객체를 삭제
boolean remove(Object o) 주어진 객체를 삭제

 

1️⃣ HashSet

  • 배열과 연결 노드를 결합한 자료구조 형태
  • 가장 빠른 임의 검색 접근 속도를 가짐
  • 추가, 삭제, 검색, 접근성이 모두 뛰어남
  • 대신 순서를 전혀 예측할 수 없음
Set<Integer> hashSet = new HashSet<>();
hashSet.add(10);
hashSet.add(20);
hashSet.add(10); // 중복된 요소는 저장 X

hashSet.size(); // 2
hashSet.toString(); // [20,10] 순서가 뒤죽박죽

 

2️⃣ LinkedHashSet

  • 순서를 가진 Set 자료 
  • 추가된 순서 or 가장 최근에 접근한 순서대로 접근 가능
  • 중복 제거 & 순서 유지 → LinkedHashSet이 적합
Set<Integer> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add(10);
linkedHashSet.add(20);
linkedHashSet.add(10); // 중복된 요소는 저장 X

linkedHashSet.size(); // 2
linkedHashSet.toString(); // [10,20] 들어간 순서대로 출력

 

3️⃣ TreeSet

  • 이진 검색 트리 (binary search tree) 자료구조 형태로 데이터를 저장
  • 중복 허용 X, 순서 X
  • 대신 데이터를 정렬하여 저장하고 있다는 특징이 있음
  • 정렬, 검색, 범위 검색에 높은 성능
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(7);
treeSet.add(4);
treeSet.add(9);
treeSet.add(1);
treeSet.add(5);

treeSet.toString(); // [1,4,5,7,9] 알아서 정렬됨


Map 인터페이스 

  • 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합
  • 값은 중복 저장 가능 but 키는 중복X
  • 중복된 키와 값을 저장시, 기존의 값에 넣으려는 값이 덮어씌워진다.
  • 저장 순서가 유지되지 않음

💡헷갈렸던 메소드 정리 

메서드 설명
Set entrySet() Map에 저장된 키-값 쌍을 Map.Entry 타입의 객체로 저장한 Set을 반환
Set keySet() Map에 저장된 모든 key 객체를 반환
Object remove(Object key) 지정된 key객체와 일치하는 key-value 객체 삭제
Collection values() Map에 저장된 모든 value 객체를 반환

 

1️⃣ HashMap

  • HashTable을 보완한 컬렉션
  • 배열과 연결이 결합된 형태, key-value로 하나의 데이터를 저장
  • 중복 허용 X, 순서 보장 X
  • 추가, 삭제, 검색, 접근성 모두 뛰어남
  • 비동기로 동작하기 때문에 멀티 스레드 환경에서는 어울리지 X
Map<String,String> hashMap = new HashMap<>();
hashMap.put("apple", "사과");
hashMap.put("banana", "바나나");
hashMap.put("peach", "복숭아");

hashMap.get("apple"); // 사과

for(String key : hashMap.keySet()){
	System.out.println(key + " -> " + hashMap.get(key));
}
/*
apple -> 사과
banana -> 바나나
peach -> 복숭아
*/

 

2️⃣ LinkedHashMap

  • HashMap을 상속하지만, Entry들이 연결 리스트를 구성하여 데이터의 순서를 보장
Map<Integer, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put(1, "one");
linkedHashMap.put(2, "two");
linkedHashMap.put(3, "tree");

for(Integer key : linkedHashMap.keySet()) {
    System.out.println(key + " => " + linkedHashMap.get(key)); 
}
/*
1 => one
2 => two
3 => three
*/

 

3️⃣ TreeMap

  • 이진 검색 트리 형태로 key-value 데이터를 저장 (TreeSet과 같은 원리)
  • SortedMap 인터페이스를 구현하고 있어 Key 값을 기준으로 정렬되는 특징 가짐
  • 정렬된 순서로 키/값 저장하므로 빠른 검색 가능
  • 정렬 순서 : 숫자 → 알파벳 대문자 → 알파벳 소문자 → 한글 순
Map<Integer, String> treeMap = new TreeMap<>();
treeMap.put(1, "Toby");
treeMap.put(2, "jennifer");
treeMap.put(3, "Mark");

for(Integer key : treeMap.keySet()){
	System.out.println(key + "->" + treeMap.get(key));
}
/*
1 -> Toby
2 -> jennifer
3 -> Mark
*/

참고 : 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

 

🧱 Java Collections Framework 종류 💯 총정리

Java Collection Framework 자바 새내기분들은 컬렉션 프레임워크라는 단어에 뭔가 거창하고 어려운 느낌이 들수 있겠지만, 그냥 자료 구조(Data Structure) 종류의 형태들을 자바 클래스로 구현한 모음집

inpa.tistory.com

'CS > Java' 카테고리의 다른 글

Hash  (0) 2025.04.28
Reflection  (1) 2025.04.24
Generic  (0) 2025.04.23
Java 8 특징  (0) 2025.04.07
자바의 비동기 처리  (0) 2025.04.07