10장: 컬렉션 프레임워크
10.1 컬렉션(Collection)
(1) 컬렉션의 필요성
- 유사한 객체를 여러 개 저장하고 조작해야할 때가 많음
- 배열을 사용 → 배열은 크기가 고정되어서 사용하기 불편함
- 연결 리스트(LinkedList)를 사용하면 → 크기가 가변적이어서 편리함
(2) 컬렉션 프레임워크
- 컬렉션: 데이터를 한 곳에 모아 편리하게 저장 및 관리하는 가변 크기의 객체 컨테이너
- 컬렉션 프레임워크: 객체를 한 곳에 모아 효율적으로 관리하고 편리하게 사용할 수 있도록 제공하는 환경
- 종류: Stack, Queue, Collection, ArrayList, LinkedList 등이 있음
- 컬렉션 프레임워크의 계층 구조: 그림에서는 생략되어 있지만 맨 상위 계층은 Object이다. Iterate는 순회를 하는 기능을 하며 컬렉션 전체에 대해 적용할 수 있다는 것을 나타낸다.
(3) 컬렉션 인터페이스(Collection Interface)
- 컬렉션의 요소는 객체만 사용할 수 있음: int, char, double 등의 기본 타입은 자동 박싱/언박싱 기능으로 사용할 수 있음
- 컬렉션은 제네릭(Generic) 기법으로 구현: 특정 타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 클래스나 메소드를 일반화 시키는 기법
- <E>, <K>, <V>: 타입 매개 변수를 뜻함
- 컬렉션 인터페이스의 종류
인터페이스 | 특징 | 구현 클래스 | |
Collection | List | 순서가 있고, 중복 가능 | ArrayList, Stack, Vector, LinkedList |
Queue | 객체를 입력한 순서대로 저장, 중복 가능 | Priorityqueue, LinkedList | |
Set | 순서 없음. 중복 불가 | HashSet, TreeSet |
10.2 리스트 컬렉션
(1) 리스트 컬렉션(List Collention)
- 순서가 있는 객체를 중복 여부와 상관 없이 저장하는 리스트의 자료 구조를 지원하는 기능
- 배열과 매우 유사하지만 배열과 달리 크기가 가변적임
- ArrayList vs LinkedList: ArrayList는 get()은 빠르지만 데이터의 변동이 느린 반면, LinkedList는 get()이 빠르지만 데이터의 변동이 빠름
(2) ArrayList <E>
- ArrayList<E>의 특성
- java.util.ArrayList를 import해서 사용해야함. 가변 크기 배열을 구현한 클래스를 뜻함. <E>에는 E 대신 요소로 사용할 특정 타입(Wrapper, 객체 등)을 넣어서 구체화해야함
- ArrayList에 삽입 가능한 것: 객체, null, 기본 타입(Wrapper 형태로)
- ArrayList에 객체를 삽입하기/삭제하기: 리스트의 맨 뒤에 객체를 추가함- 공간이 부족하면 자동으로 늘어남. 리스트의 중간에 객체 삽입하기 - 삽입된 뒤의 객체는 뒤로 하나씩 이동됨. 임의의 위치에 있는 객체 삭제하기 - 객체를 삭제한 후 자동으로 자리가 이동됨
- 스레그 동기화를 지원하지 않음: 다수의 스레드가 동시에 ArrayList에 접근할 때 동기화되지 않음. 따라서 개발자가 따로 스레드 동기화 코드를 작성해야함
- ArrayList 선언하기
- ArrayList<E>의 주요 메소드
메소드 | 설명 |
boolean add(E e) | ArrayList의 맨 뒤에 요소를 추가함 |
void add(int index, E element) | 지정된 인덱스에 지정한 객체를 삽입 |
void clear() | ArrayList의 모든 요소를 삭제함 |
boolean contains(Object o) | ArrayList가 지정한 객체를 포함하고 있으면 true를 반환함 |
E elementAt(int index) | 지정한 인덱스의 요소를 반환함 |
E get(int index) | 지정한 인덱스의 요소를 반환함 |
int indexOf(Object o) | 지정한 객체와 같은 첫 번째 요소의 인덱스를 반환함. 없으면 -1을 반환함 |
boolean isEmpty() | ArrayList가 비어있으면 true를 반환함 |
E remove(int index) | 지정한 인덱스의 요소를 삭제한 |
int size() | 지정한 객체와 같은 첫 번째 요소를 ArrayList에서 삭제함 |
Object[] toArray() | ArrayList의 모든 요소를 포함하는 배열을 반환함 |
- LinkedList<E> 선언하기: 왼쪽이 List여도 상관 없음(상위 계층 클래스이기 때문)
(3) Iterator(반복자): 순차 검색 하기
- Iterarot<e>인터페이스
- 컬렉션의 종류의 관계 없이 반복자를 이용해 컬력션에 포함된 객체를 순차적으로 순회
- Iterator<E> 인터페이스 메소드
메소드 | 설명 |
boolean hasNext() | 다음 반복에서 사용할 요소가 있으면 true를 반환함 |
E next() | 다음 요소를 반환함 |
void remove() | 마지막으로 반환된 요소를 제거함 |
- iterator() 메소드: iterator()를 호출하면 Iterator 객체를 반환함. Iterator 객체를 이용하면 인덱스 없이 순차적으로 검색이 가능함
- 컬렉션의 데이터 반복 처리
Collenction<String> collection = new ArrayList<String>(); Iterator<String> it = collection.iterator(); while(it.hasNext()) { String str = it.next(); // 원소 처리 } |
10.3 세트 컬렉션(Set Collection)
- 특징: 순서가 정해져 있지 않고 중복이 허용되지 않는 객체를 저장하는 자료 구조를 지원하는 기능. 추가된 메소드는 없지만 중복 원소를 자동으로 배제함. 인덱스가 없고 저장 순서를 무시함
10.4 맵 컬렉션(Map Collection)
(1) Map Collection 개요
- Map의 Collection화를 하기위한 메소드
- Set<K> keyset(): Map에 포함된 key를 Set 타입으로 반환
- Collection <V> values(): Map에 포함된 value를 Collection 타입으로 반환
- Set<Map.Entry<K, V>> entrySet(): Map에 포함된 key-value 쌍을 Set 타입으로 반환
Map <Object, Object> map = new HashMap(); for(Object key : map.keySet()) { // 작업 } |
Map <String, Object> map = new HashMap(); for(Object value : map.values()) { // 작업 } |
Map <String, Object> map = new HashMap(); for(Map.Entry<String, Object> entry : map.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); // 작업 } |
(2) HashMap <K, V>
- HashMap<K, V>의 특성
- java.util.HashMap: K에는 키로 사용할 요소의 타입을, V에는 값으로 사용할 요소의 타입을 지정해야함
- 키(key)와 값(value)의 쌍으로 구성되는 요소를 다루는 컬렉션: 키와 값이 한 쌍으로 삽입됨. 키는 내부적을 해시맵에서 삽입되는 위치 결정에 사용. 값을 결정하기 위해서는 반드시 키를 이용해야함
- 삽입 및 검색이 빠름
- 요소 삽입: put()
- 요소 검색: get()
- HashMap<K,V> 선언하기
- HashMap<K,V>의 주요 메소드
메소드 | 설명 |
void clear() | HashMap의 모든 키 삭제 |
boolean containKey(Obejct key) | 키를 포함하고 있으면 true를 반환함 |
boolean containsValue(Object value) | 하나 이상의 키를 지정된 값에 매핑시킬 수 있으면 true를 반환함 |
V get(Object key) | 지정된 키에 맵핑되는 값을 반환하거나 맵핑되는 값이 없으면 null을 반환함 |
boolean inEmpty() | HashMap이 비어 있으면 true를 반환함 |
Set<k> keySet() | HashMap에 있는 모든 키를 담은 Set<K> 컬렉션을 반환함 |
V put(K key, V value) | key와 value를 맵핑하여 HashMap에 저장함 |
V remove(Object key) | 지정된 키와 이에 맵핑된 모든 값들을 HashMap에서 삭제함 |
int size() | HashMap에 포함된 요소의 개수를 반환함 |
(3) Collections 클래스 활용
- Collections 클래스: java.util 패키지에 포함되어 있음. 컬렉션에 대해 연산을 수행하고 결과로 컬렉셩을 반환함. 모든 메소드는 static 타입임
- 주요 메소드
- sort(): 컬렉션에 포함된 요소를 정렬함
- reverse(): 요소의 순서를 반대로 함
- max(), min(): 요소들의 최대, 최솟값을 찾아냄
- binarySearch(): 특정 값을 검색함
'기초' 카테고리의 다른 글
[JAVA] 11 - 쓰레드, 멀티태스킹 (0) | 2020.05.20 |
---|---|
[JAVA] 10 - 파일 입출력 (0) | 2020.05.19 |
[JAVA] 8 - 추상 클래스, 인터페이스, 패키지 (0) | 2020.05.17 |
[JAVA] 7 - super(), 메소드 오버라이딩, 타입 변환(캐스팅) (0) | 2020.05.14 |
[JAVA] 6 - 생성자, 접근 제한자, 상속 (0) | 2020.05.13 |