1. 컬렉션 프레임웍(Collections Framework)
1) 컬렉션 프레임웍이란?
- 데이터 군(群)을 저장하는 클래스들을 표준화한 설계
- 컬렉션(Collection) : 다수(多數)의 데이터
- 프레임웍(Framework) : 표준화된 프로그래밍 방식
- 컬렉션 클래스 : 다수의 데이터를 저장할 수 있는 클래스
2) 컬렉션 프레임웍의 장점
(1) 컬렉션, 다수의 데이터를 다루는 데 필요한 다양하고 풍부한 클래스들을 제공
-> 프로그래머의 짐을 덜어줌
(2) 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화
-> 사용법이 편리하고 재사용성이 높음
3) 핵심 인터페이스
- 컬렉션데이터 그룹을 크게 3가지 타입이 존재한다고 인식하여 각 컬렉션을 다루는데 필요한 기능을 가진 3개의 인터페이스를 정의함
- List와 Set의 공통된 부분을 뽑아서 새로운 인터페이스 Collection을 추가로 정의함
인터페이스 | 특 징 |
List | 순서가 있는 데이터의 집합, 데이터의 중복을 허용함 ex) 대기자 명단 |
구현클래스 : ArrayList, LinkedList, Stack, Vector 등 | |
Set | 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않음 ex) 양의 정수집합, 소수의 집합 |
구현클래스 : HashSet, TreeSet 등 | |
Map | 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합, 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용함 ex) 우편번호, 지역번호(전화번호) |
구현클래스 : HashMap, TreeMap, Hashtable, Properties 등 |
4) Collection 인터페이스
- List와 Set의 조상
- 컬렉션 클래스에 저장된 데이터를 읽고, 추가하고, 삭제하는 등 컬렉션을 다루는데 가장 기본적인 메서드들을 정의함
boolean add(Object o) boolean addAll(Collection c) |
지정된 객체(o) 또는 Collection(c)의 객체들을 Collection에 추가함 |
void clear() | Collection의 모든 객체를 삭제 |
boolean contains(Object o) boolean containsAll(Collection c) |
지정된 객체(o) 또는 Collection의 객체들이 Collection에 포함되어 있는지 확인 |
boolean equals(Object o) | 동일한 Collection인지 비교 |
int hashCode() | Collection의 hash code를 반환 |
boolean isEmpty() | Collection이 비어있는지 확인 |
Iterator iterator() | Collection의 Iterator를 얻어서 반환 |
boolean remove(Object o) | 지정된 객체를 삭제 |
boolean removeAll(Collection c) | 지정된 Collection에 포함된 객체들을 삭제 |
boolean retainAll(Collection c) | 지정된 Collection에 포함된 객체만을 남기고 다른 객체들은 Collection에서 삭제. 이 작업으로 인해 Collection에 변화가 있으면 true를, 그렇지 않으면 false를 반환 |
int size() | Collection에 저장된 객체의 개수를 반환 |
Object[] toArray() | Collection에 저장된 객체를 객체배열(Object[])로 반환 |
Object[] toArray(Object[] a) | 지정된 배열에 Collection의 객체를 저장해서 반환 |
5) List 인터페이스
- 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는데 사용
- Collection인터페이스로부터 상속받은 것들은 제외한 메서드
void add(int index, Object element) boolean addAll(int index, Collection c) |
지정된 위치(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를 반환 |
Object remove(int index) | 지정된 위치(index)에 있는 객체를 삭제하고 삭제된 객체를 반환 |
Object set(int index, Object element) | 지정된 위치(index)에 객체(element)를 저장 |
void sort(Comparator c) | 지정된 비교자(comparator)로 List를 정렬 |
List subList(int fromIndex, int toIndex) | 지정된 범위(fromIndex부터 toIndex)에 있는 객체 반환 |
6) Set 인터페이스
- 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용
7) Map 인터페이스
- 키(key)와 값(value)을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는데 사용
- 키는 중복될 수 없지만 값은 중복을 허용함
- 기존에 저장된 데이터와 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막 저장된 값이 남음
void clear() | Map의 모든 객체를 삭제 |
boolean containsKey(Object key) | 지정된 key객체와 일치하는 Map의 key객체가 있는지 확인 |
boolean containsValue(Object value) | 지정된 value객체와 일치하는 Map의 value객체가 있는지 확인 |
Set entrySet() | Map에 저장되어 있는 key-value 쌍을 Map.Entry타입의 객체로 저장한 Set으로 반환 |
boolean equals(Object o) | 동일한 Map인지 비교 |
Object get(Object key) | 지정된 key객체에 대응하는 value객체를 찾아서 반환 |
int hashCode() | 해시코드를 반환 |
boolean isEmpty() | Map이 비어있는지 확인 |
Set keySet() | Map에 저장된 모든 key객체를 반환 |
Object put(Object key, Object value) | Map에 value객체를 key객체에 연결(mapping)하여 저장 |
void putAll(Map t) | 지정된 Map의 모든 key-value쌍을 추가 |
Object remove(Object key) | 지정된 key객체와 일치하는 key-value객체를 삭제 |
int size() | Map에 저장된 key-value쌍의 개수를 반환 |
Collection values() | Map에 저장된 모든 value객체 반환 |
8) Map.Entry 인터페이스
- Map인터페이스의 내부 인터페이스
- Map에 저장되는 key-value쌍을 다루기 위해 정의됨
boolean equals(Object o) | 동일한 Entry인지 비교 |
Object getKey() | Entry의 key객체 반환 |
Object getValue() | Entry의 value객체 반환 |
int hashCode() | Entry의 해시코드 반환 |
Object setValue(Object value) | Entry의 value객체를 지정된 객체로 바꿈 |
2. ArrayList
- List인터페이스를 구현하여 데이터의 저장순서가 유지되고 중복을 허용함
- 컬렉션 프레임웍에서 가장 많이 사용되는 컬렉션 클래스
- Vector와 구현원리와 기능적인 측면에서 동일함
- Object배열을 이용해서 데이터를 순차적으로 저장 (0번째, 1번째, ...)
- 배열에 더 이상 저장할 공간이 없으면 보다 큰 새로운 배열을 생성해서 기존의 배열에 저장된 내용을 새로운 배열로 복사한 뒤 저장
1) 생성자
ArrayList() | 크기가 10인 ArrayList 생성 |
ArrayList(Collection c) | 주어진 컬렉션이 저장된 ArrayList 생성 |
ArrayList(int initialCapacity) | 지정된 초기용량을 갖는 ArrayList 생성 |
2) 데이터 추가
boolean add(Object o) | ArrayList의 마지막에 객체 추가, 성공하면 true |
void add(int index, Object element) | 지정된 위치(index)에 객체 저장 |
boolean addAll(Collection c) | 주어진 컬렉션의 모든 객체를 저장 |
boolean addAll(int index, Collection c) | 지정된 위치부터 주어진 컬렉션의 모든 객체를 저장 |
Object set(int index, Object element) | 지정된 위치(index)에 주어진 객체 저장 |
3) 데이터 삭제
void clear() | ArrayList를 완전히 비움 |
Object remove(int index) | 지정된 위치(index)에 있는 객체 제거 |
boolean remove(Object o) | 지정된 객체를 제거, 성공하면 true |
boolean removeAll(Collection c) | 지정된 컬렉션에 저장된 것과 동일한 객체들을 제거 |
boolean retainAll(Collection c) | 지정된 컬렉션과 공통된 것만을 남기고 나머지는 제거 |
4) 데이터 가져오기
Object get(int index) | 지정된 위치(index)에 저장된 객체 반환 |
Iterator iterator() | ArrayList의 Iterator객체 반환 |
ListIterator listIterator() | ArrayList의 ListIterator객체 반환 |
ListIterator listIterator(int index) | ArrayList의 지저된 위치부터 시작하는 ListIterator객체 반환 |
List subList(int fromIndex, int toIndex) | fromIndex부터 toIndex사이에 저장된 객체 반환 |
5) 기타
Object clone() | ArrayList 복제 |
boolean contains(Object o) | 지정된 객체(o)가 ArrayList에 포함되어 있는지 확인 |
int indexOf(Object o) | 지정된 객체(o)가 저장된 위치 반환(순방향) |
int lastIndexOf(Object o) | 지정된 객체(o)가 저장된 위치 반환(역방향) |
boolean isEmpty() | 비어있는지 확인 |
int size() | 저장된 객체 개수 반환 |
void sort(Comparator c) | 지정된 정렬기준(c)로 ArrayList 정렬 |
Object[] toArray() | 모든 객체들을 객체배열로 반환 |
Object[] toArray(Object[] a) | 모든 객체들을 객체배열 a에 담아 반환 |
void trimToSize() | 용량을 크기에 맞게 줄임 (빈 공간을 없앰) |
void ensureCapacity(int minCapacity) | 용량이 최소한 minCapacity가 되도록 함 |
3. LinkedList
배열의 단점
1. 크기를 변경할 수 없음
2. 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸림
- 배열의 단점을 보완하기 위해 고안된 자료구조
- 불연속적으로 존재하는 데이터를 서로 연결(link)한 형태로 구성
1) 생성자
LinkedList() | LinkedList 객체 생성 |
LinkedList(Collection c) | 주어진 컬렉션을 포함하는 LinkedList 객체 생성 |
2) 데이터 추가
boolean add(Object o) | 지정된 객체(o)를 LinkedList의 끝에 추가, 성공하면 true |
void add(int index, Object element) | 지정된 위치에 객체 추가 |
boolean addAll(Collection c) | 주어진 컬렉션에 포함된 모든 요소를 LinkedList의 끝에 추가, 성공하면 true |
boolean addAll(int index, Collection c) | 지정된 위치에 주어진 컬렉션에 포함된 모든 요소를 LinkedList의 끝에 추가, 성공하면 true |
Object set(int index, Object element) | 지정된 위치의 객체를 주어진 객체로 바꿈 |
3) 데이터 삭제
void clear() | LinkedList를 완전히 비움 |
Object remove(int index) | 지정된 위치(index)에 있는 객체 제거 |
boolean remove(Object o) | 지정된 객체를 제거, 성공하면 true |
boolean removeAll(Collection c) | 지정된 컬렉션에 저장된 것과 동일한 객체들을 제거 |
boolean retainAll(Collection c) | 지정된 컬렉션과 공통된 것만을 남기고 나머지는 제거 |
4) 데이터 가져오기
Object get(int index) | 지정된 위치(index)에 저장된 객체 반환 |
Iterator iterator() | LinkedList의 Iterator객체 반환 |
ListIterator listIterator() | LinkedList의 ListIterator객체 반환 |
ListIterator listIterator(int index) | LinkedList의 지저된 위치부터 시작하는 ListIterator객체 반환 |
List subList(int fromIndex, int toIndex) | fromIndex부터 toIndex사이에 저장된 객체 반환 |
5) 기타
boolean contains(Object o) | 지정된 객체(o)가 LinkedList에 포함되어 있는지 확인 |
boolean containsAll(Collection c) | 지정된 컬렉션의 모든 요소가 포함되어 있는지 확인 |
int indexOf(Object o) | 지정된 객체(o)가 저장된 위치 반환(순방향) |
int lastIndexOf(Object o) | 지정된 객체(o)가 저장된 위치 반환(역방향) |
boolean isEmpty() | 비어있는지 확인 |
int size() | 저장된 객체 개수 반환 |
void sort(Comparator c) | 지정된 정렬기준(c)로 LinkedList 정렬 |
Object[] toArray() | 모든 객체들을 객체배열로 반환 |
Object[] toArray(Object[] a) | 모든 객체들을 객체배열 a에 담아 반환 |
6) Queue인터페이스와 Deque인터페이스를 구현하면서 추가된 것들
Object element() | LinkedList의 첫 번째 요소 반환 |
boolean offer(Object o) | 지정된 객체(o)를 LinkedList의 끝에 추가, 성공하면 true |
Object peek() | LinkedList의 첫 번째 요소 반환 |
Object poll() | LinkedList의 첫 번째 요소 반환 (LinkedList에서는 제거됨) |
Object remove() | LinkedList의 첫 번째 요소 제거 |
void addFrist(Object o) | LinkedList의 맨 앞에 객체 추가 |
void addLast(Object o) | LinkedList의 맨 끝에 객체 추가 |
Iterator descendingIterator() | 역순으로 조회하기 위한 DescendingIterator 반환 |
Object getFirst() | LinkedList의 첫 번째 요소 반환 |
Object getLast() | LinkedList의 마지막 요소 반환 |
boolean offerFirst(Object o) | LinkedList의 맨 앞에 객체 추가, 성공하면 true |
boolean offerLast(Object o) | LinkedList의 맨 끝에 객체 추가, 성공하면 true |
Object peekFirst() | LinkedList의 첫 번째 요소 반환 |
Object peekLast() | LinkedList의 마지막 요소 반환 |
Object poolFirst() | LinkedList의 첫 번째 요소 반환하면서 제거 |
Object poolLast() | LinkedList의 마지막 요소 반환하면서 제거 |
Object pop() | removeFirst()와 동일 |
void push(Object o) | addFirst()와 동일 |
Object removeFirst() | LinkedList의 첫 번째 요소 제거 |
Obejct removeLast() | LinkedList의 마지막 요소 제거 |
boolean removeFirstOccurrence(Object o) | LinkedList에서 첫 번째로 일치하는 객체 제거 |
boolean removeLastOccurrence(Object o) | LinkedList에서 마지막으로 일치하는 객체 제거 |
※ ArrayList와 LinkedList의 비교
컬렉션 | 읽기(접근시간) | 추가/삭제 | 비 고 |
ArrayList | 빠르다 | 느리다 | 순차적인 추가삭제는 더 빠름 비효율적인 메모리 사용 |
LinkedList | 느리다 | 빠르다 | 데이터가 많을수록 접근성이 떨어짐 |
참고 - Do it! 자료구조와 함께 배우는 알고리즘 입문 : 자바 편 (저자 : 보요 시바타, 출판 : 이지스 퍼블리싱)
'공부 > Java' 카테고리의 다른 글
[Java-11] 컬렉션 프레임웍 - Arrays, Comparator, Comparable, HashSet, TreeSet (0) | 2021.04.15 |
---|---|
[Java-11] 컬렉션 프레임웍 - Stack, Queue, Iterator, ListIterator, Enumeration (0) | 2021.04.14 |
[Java-10] 날짜와 시간 & 형식화 - java.time패키지 (0) | 2021.04.12 |
[Java-10] 날짜와 시간 & 형식화 - Calendar, 형식화 클래스 (0) | 2021.03.12 |
[Java-09] 유용한 클래스 (0) | 2021.03.10 |