본문 바로가기

Java

Java 컬렉션 프레임워크(collections framework)

 

1. 컬렉션 프레임워크(collections framework)

1) 컬렉션(collection)

- 여러 객체(데이터)를 모아 놓은 것

 

2) 프레임워크(framework)

- 표준화, 정형화된 체계적인 프로그래밍 방식

 

3) 컬렉션 프레임워크(collections framework)

- 컬렉션(다수의 객체=데이터)을 다루기 위한 표준화된 프로그래밍 방식

- 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스 제공

- java.util 패키지에 포함(JDK1.2부터 제공)

 

2. 컬렉션 프레임워크의 핵심 인터페이스

인터페이스 특징
List - 순서가 있는 데이터 집합
- 중복 허용
- 예시: 대기자 명단
구현 클래스: ArrayList, LinkedList, Stack, Vector
Set - 순서가 없는 데이터 집합
- 중복 불가
- 예시: 양의 정수 집합, 소수의 집합
구현 클래스: HashSet, TreeSet 등
Map - 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터 집합
- 순서 없음
- 키는 중복 불가, 값은 중복 허용
- 예시: 우편번호, 지역번호
구현 클래스: HashMap, TreeMap, Hashtable, Properties 등 

 

3. Collection 인터페이스

- List와 Set의 공통점을 뽑아 컬렉션 인터페이스 정의

- Collection 인터페이스의 기본 메서드

기능 메서드 설명
추가 boolean add(Object o)
boolean addAll(Collection c)
지정된 객체(o) 또는 컬렉션(c)의 객체들을 Collection에 추가
조회 boolean contains(Object o)
boolean containsAll(Colletion c)
지정된 객체(o) 또는 컬렉션(c)의 객체들을 Collection에 포함되었는지 확인
boolean equals(Object o) 동일한 Collection인지 비교
int hashCode() Collection hash code 반환
boolean isEmpty() Collection 비어있는지 확인
Iterator iterator() Collection의 Iterator를 얻어서 반환
int size() Collection에 저장된 객체의 개수 반환
Object[]toArray(0 Collection에 저장된 객체를 객체 배열(Object[])로 반환
Object[]toArray(Object[] a) 지정된 배열에 Collection 객체를 저장해서 반환
삭제 void clear() Collection의 모든 객체 삭제
boolean remove(Object o)
boolean remove(Colletion c)
지정된 객체(o) 또는 컬렉션(c)의 객체들을 Collection에서 삭제
boolean removeAll(Colletion c) 지정된 Collection에 포함된 객체만 남기고 다른 객체들 삭제, 이 작업 후 변화가 있으면 true, 변화가 없으면 flase 반환

 

4. List 인터페이스

1) List 인터페이스의 기본 메서드

기능 메서드 설명
추가

void add(int index, Object element)
boolean addAll(int index, Collection c)
지정된 위치(index)에 객체(element) 또는 컬렉션에 포함된 객체들을 추가
Object set(int index, Object element) 지정된 위치(index)에 객체(element) 저장
조회 Object get(int index) 지정된 위치(index)에 있는 객체 반환
int indexOf(Object o) - 지정된 객체의 위치(index) 반환
- 왼쪽에서 오른쪽으로 List의 첫 번째 요소부터 순방향으로 조회
int lastIndexOf(Object o) - 지정된 객체의 위치(index) 반환
- 오른쪽에서 왼쪽으로 List의 마지막 요소부터 역방로 조회
ListIterator listIterator()
ListIterator listIterator(int index)
List의 객체에 접근할 수 있는 ListIterator 반환
void sort(Comparator c) 지정된 비교자(comparator)로 List 정렬
List subList(int fromIndex, int tolndex) 지정된 범위(fromIndex부터 toIndex)에 있는 객체 반환
삭제 Object remove(int index) 지정된 위치(index)에 있는 객체를 삭제하고 삭제된 객체 반환

 

2)  List 인터페이스의 구현 - Vector

- 자체적 동기화 처리

 

3) List 인터페이스의 구현 - ArrayList

- 기존의 Vector를 개선한 것으로 구현 원리와 기능적으로 동일하며, vector와 다르게 동기화 처리 X

- List인터페이스를 구현하므로 저장 순서 유지, 중복 허용

- 데이터 저장공간으로 배열을 사용(배열기반)

 

 

배열의 장단점

장점
- 구조 간단, 데이터 읽는데 걸리는 시간(접근시간)이 짧음

단점
- 크기를 변경할 불가, 크기를 변경해야하는 경우 새로운 배열 생성 후 복사해야하며 크기 변경을 피하기 위한 충분히 큰 배열 생성 시 메모리 낭비 발생

- 비순차적인 데이터 추가/삭제 시간이 많이 걸림(단, 배열 끝 추가/삭제는 빠름)

 

 

4) List 인터페이스의 구현 - linked list(연결리스트)

- 배열의 단점을 보완하여 불연속적으로 존재하는 데이터를 연결(link)

- 데이터의 삭제: 단 한번의 참조 변경만으로 가능

- 데이터의 추가: 한번의 Node객체 생성과 두번의 참조 변경만으로 가능

 

List 인터페이스의 구현 - doubly linked list(이중 연결 리스트)

- 연결 리스트(LinkedList)의 데이터 접근성의 어려움을 보완(이전 Node와 다음 Node를 양방향으로 연결)

- Java는 이중 연결 리스트로 연결되어 있음

 

doubly circular linked list(이중 원형 연결리스트)

- 이중 연결 리스트 형태에 제일 앞 노드와 뒤 노드를 연결

     

5) ArrayList vs LinkedList 성능 비교

컬렉션 읽기(접근시간) 추가/  삭제 비고
ArrayList 빠름 느림 - 보통 연결리스트보다 추가/삭제가 느리지만 순차적인 추가/삭제는 빠를 수 있음
- 성능(복사나 이동 감소)을 위해 배열을 크게 할 경우 메모리 사용이 비효율적
LinkedList 느림 빠름 데이터가 많을 수록 접근성이 떨어짐

 

 

5. Set 인터페이스

- Set 구현 클래스: HashSet, SortedSet(<-TreeSet)

- Set 인터페이스의 기본 메서드

기능 메서드 설명
합집합 boolean addAll(Collection c) 지정된 컬렉션(c)의 객체들을 컬렉션에 추가
부분집합 boolean containsAll(Collection c) 지정된 컬렉션(c)의 객체들이 컬렉션에 포함되어 있는지 확인
차집합 boolean removeAll(Collection c) 지정된 컬렉션(c)에 포함된 객체들을 삭제
교집합 boolean retainAll(Collection c) 지정된 컬렉션(c)에 포함된 객체만을 남기고 나머지 삭제

* 컬렉션에 변화가 있으면 true, 변화가 없으면 false  반환

 

6. Map 인터페이스

- Map 구현 클래스: Hashtable, HashMap(<-LinkedHashMap), SortedMap(<-TreeMap)

- LinkedHashMap은 순서가 있고, 동기화가 되지 않음

- Map 인터페이스의 기본 메서드

기능 메서드 설명
추가 boolean add(Object o)
boolean addAll(Collection c)
지정된 객체(o) 또는 컬렉션(c)의 객체들을 Collection에 추가
조회

boolean containsKey(Object key) 지정된 key객체와 일치하는 Map의 key객체가 있는지 확인
boolean containsValue(Object value) 지정된 value객체와 일치하는 Map의 value객체가 있는지 확인
boolean equals(Object o) 동일한 Map인지 비교
int hashCode() Map의 hash code 반환
boolean isEmpty() Map이 비어있는지 확인
int size() Map에 저장된 객체의 개수 반환
Object get(Object key) 지정한 key 객체에 대응하는 value객체 반환
Set entrySet() Map에 저장된 key-value 쌍을 Map.Entry타입 객체로 저장한 Set으로 반환
Set keySet() Map에 저장된 모든 key 객체 반환
Collection values() Map에 저장된 모든 value 객체 반환
수정

Object put(Object key, Object value) Map에 value객체를 key 객체에 연결(mapping)하여 저장
void putAll(Map t) 지정된 Map의 모든 key-value객체 추가
삭제 void clear() Map의 모든 객체 삭제
Object remove(Object key) 지정된 Map의 모든 key-value객체 삭제