Collection framework

dodin·2025년 8월 13일

인터페이스

List

  • 순서O
  • 중복(동일한 데이터)O
    • ArrayList(조회), LinkedList(삽입), Stack(LIFO), Vector(동기화)

Set

  • 순서X
  • 중복X
    • HashSet(유일성), TreeSet(정렬)

Map

  • Key, Value, pair
  • 순서 유지X
  • Key 중복X
  • Value 중복O
    • HashMap(검색), TreeMap(정렬), Hashtable(동기화), Properties(설정)

synchronization

여러 스레드가 같은 데이터에 접근하면 데이터 불일치 가능 → synchronized 같은 동기화 필요

+-----------------------+
| Process |
| |
| +-----------------+ |
| | Heap |<------- 모든 스레드가 공유하는 객체 메모리 공간
| +-----------------+ |
| |
| +-----------------+ |
| | Method Area |<------- 클래스 정보, static 변수 공유
| +-----------------+ |
| |
| +-----------------+ +-----------------+ +-----------------+
| | Thread 1 Stack | | Thread 2 Stack | | Thread 3 Stack |
| | (독립적 영역) | | (독립적 영역) | | (독립적 영역) |
| +-----------------+ +-----------------+ +-----------------+
| |
| PC Register (각 스레드별 실행 위치 저장)
| |
+-----------------------+

VectorArrayList
동기화OX
성능느림빠름
멀티스레드안전동기화必

ArrayList

  • 크기가 가변적인 배열 구현 클래스
  • 요소 추가/삭제에 따라 자동으로 크기 변함
  • 순서O, 중복O
  • 인덱스 기반 접근
ArrayList<Integer> list = new ArrayList<>();
list.add(10); // 요소 추가
list.remove(0); // 인덱스 0의 요소 삭제

Generic

  • <> 부분
  • 타입 안전성 보장 : 어떤 타입의 객체만 저장할지 지정
  • 형변환 불필요 : 캐스팅X
ArrayList<Integer> list = new ArrayList<>();
// 정수만 저장할 수 있는, 
// 크기 조절이 가능한 배열(ArrayList)를 생성하고, 
// 그 객체를 list이라는 이름으로 참조한다.
ArrayList list = new ArrayList();
list.add("문자열");
list.add(123); // 문자열, 숫자 모두 가능 -> 꺼낼 때 오류

ArrayList<Integer> list = new ArrayList<>();
list.add("문자열"); // 컴파일 에러

HashSet

  • 순서X, 중복X
  • 집합 구현체
  • hashing을 사용해 추가/검색/삭제
  • HashSet(Collection c) 생성자로 컬렉션의 모든 요소 복사, 자동으로 중복 제거
ArrayList list = new ArrayList();
// ArrayList<Integer> list = new ArrayList<>(); // 제네릭을 명시하면 타입 안정성 ↑
list.add(3);
list.add(3);
list.add(2);
HashSet set = new HashSet(list);
// HashSet<Integer> set = new HashSet<>(list);
// set = {3,2} 순서X,중복X

TreeSet

  • 이진 검색 트리(Red-Black Tree) 기반
  • 중복 제거 + 자동 정렬(오름차순)
  • TreeSet(Collection c) 생성자로 다른 컬렉션의 요소 복사, 정렬
  • Integer처럼 Comparable을 구현한 타입만 저장 가능
ArrayList list = new ArrayList();
list.add(3);
list.add(3);
list.add(2);
TreeSet tset = new TreeSet(list);
// TreeSet<Integer> tset = new TreeSet<>(list);
// tset = {2,3} 오름차순, 중복X

Stack

  • LIFO
  • push(), pop(), peek(), empty() 메소드
  • addAll(Collection c)로 모든 요소 push 순서대로 (Vector를 상속받아 addAll 가능)
Stack stack = new Stack();
stack.addAll(

Comparable

  • 기본 정렬
  • 클래스 안에서 직접 구현
  • 객체(클래스 인스턴스) 끼리 크기/순서 비교에 사용되는 인터페이스
public interface Comparable<T> {
public int compareTo(T o);
//두 객체를 비교해서, 음수(작다)/0(같다)/양수(크다) 리턴

Comparator

  • 외부 정렬
  • 클래스 외부에서 정렬 기준 별도 정의
코드를 입력하세요

Hashtable

profile
hello

0개의 댓글