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객체 삭제 |
'Java' 카테고리의 다른 글
Java Iterator, ListIterator, Enumeration 인터페이스 (0) | 2023.01.03 |
---|---|
Java 스택과 큐 (0) | 2023.01.03 |
Java 형식화 클래스 DecimalFormat, SimpleDateFormat (0) | 2022.12.30 |
Java 날짜와 시간, Calendar 클래스 (0) | 2022.12.30 |
Java Number클래스 (0) | 2022.12.30 |