Collection
- 컬렉션(Collection)
- 자료구조
- 배열의 문제점 & 컬렉션의 장점
- 컬렉션 주요 인터페이스
- List
- List 계열 주요 메소드
- ArrayList
- Vector
- LinkedList
- Comparable, Comparator
- Collections.sort()
- Set
- Set 계열 주요 메소드
- HashSet
- LinkedHashSet
- Enumeration, Iterator, Listlterator
- Map
- Map 계열 주요 메소드
- HashMap
- Properties
- TreeSet & TreeMap
- Stack
- Queue
- Deque
Collection
메모리 상에서 자료를 구조적으로 처리하는 방법을 자료 구조라 일컫는데
컬렉션은 자바에서 제공하는 자료구조를 담당하는 프레임워크
추가, 삭제, 정렬 등의 기능처리가 간단하게 해결 되어 자료구조적 알고리즘을 구현할 필요 없음
java.util 패키지에 포함되며, 인터페이스를 통해 정형화된 방법으로 다양한 컬렉션 클래스 이용 가능
자료구조
배열의 문제점 & 컬렉션의 장점
배열의 문제점 | 1. 한번 크기를 지정하면 변경할 수 없다. - 공간 크기가 부족하면 에러가 발생 -> 할당 시 넉넉한 크기로 할당하게 됨(메모리 낭비) - 필요에 따라 공간을 늘리거나 줄일 수 없음 2. 배열에 기록된 데이터에 대한 중간 위치의 추가, 삭제가 불편하다. - 추가, 삭제할 데이터부터 마지막 기록된 데이터까지 하나씩 뒤로 밀어내고 추가해야 함(복잡함) 3. 한타입의 데이터만 저장 가능하다. |
컬렉션의 장점 | 1. 저장하는 크기의 제약이 없다 2. 추가, 삭제, 정렬 등의 기능 처리가 간단하게 해결된다. - 자료를 구조적으로 처리하는 자료구조가 내장되어 있어 알고리즘 구현이 필요 없음 3. 여러 타입의 데이터만 저장 가능하다. - 객체만 저장할 수 있기 때문에 필요에 따라 기본 자료형을 저장해야 하는 경우 Wrapper 클래스 사용 |
컬렉션 주요 인터페이스
인터페이스 분류 | 특징 | 구현 클래스 | |
Collection | List 계열 | 1. 순서를 유지하고 저장 2. 중복 저장 가능 |
ArrayList, Vector, LinkedList |
Set 계열 | 1. 순서를 유지하지 않고 저장 2. 중복 저장 안됨 |
HashSet, TreeSet | |
Map 계열 | 1. 키와 값의 쌍으로 저장 2. 키는 중복 저장 안됨 |
HashMap, HashTable, TreeMap, Properties |
List
자료들을 순차적으로 나열한 자료구조로 인덱스로 관리되며, 중복해서 객체 저장 가능
구현 클래스로 ArrayList와 Vector, LinkedList가 있음
- List 계열 주요 메소드
기능 | 메소드 | 리턴타입 | 설명 |
객체 추가 | add(E e) | boolean | 주어진 객체를 맨 끝에 추가 |
add(int index, E element) | void | 주어진 인덱스에 객체를 추가 | |
addAll(Collection <? extends E> c) | boolean | 주어진 Collection 타입 객체를 리스트에 추가 | |
set(int index, E element) | E | 주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈 | |
객체 검색 | contains(Object o) | boolean | 주어진 객체가 저장되어 있는지 여부 |
get(int index) | E | 주어진 인덱스에 저장된 객체를 리턴 | |
iterator() | Iterator<E> | 저장된 객체를 한번씩 가져오는 반복자 리턴 | |
isEmpty() | boolean | 컬렉션이 비어 있는지 조사 | |
size() | int | 저장되어 있는 전체 객체수를 리턴 | |
객체 삭제 | clear() | void | 저장된 모든 객체를 삭제 |
remove(int index) | E | 주어진 인덱스에 저장된 객체를 삭제 | |
remove(Object o) | boolean | 주어진 객체를 삭제 |
- ArrayList
List의 후손으로 초기 저장 용량은 10으로 자동 설정되며 따로 지정도 가능
저장 용량을 초과한 객체들이 들어오면 자동으로 늘어나며 고정도 가능
동기화(Synchronized)를 제공하지 않음
동기화: 하나의 데이터에 대해 여러 스레드가 접근하려 할 때 한 시점에서 하나의 스레드만 사용할 수 있도록 하는 것
ex)
List<E> list = new ArrayList<E>();
- Vector
List의 후손
ArrayList와 동등하지만 동기화를 제공한다는 점이 ArrayList와 차이점
-> List 객체들 중에서 가장 성능이 좋지 않음
- LinkedList
List의 후손으로, 인접 참조를 링크해 체인처럼 관리
특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞/뒤 링크만 변경하면 되기 때문에
객체 삭제와 삽입이 빈번하게 일어나는 곳에서는 ArrayList보다 성능이 좋음
- Comparable, Comparator
Comparable | Comparator | |
패키지 | java.lang | java.util |
사용 메소드 | compareTo() | compare() |
정렬 | 기존의 정렬 기준을 구현하는데 사용 | 그 외 다른 여러 기준으로 정렬하고자 할 때 사용 |
사용법 | 정렬하고자 하는 객체에 Comparable를 상속받아 compareTo() 메소드를 오버라이딩해 기존의 정렬 기준 재정의 -> 한개의 정렬만 가능 |
vo 패키지 안에 필요한 정렬 기준에 맞춘 클래스들을 생성하고 Comparator를 상속받아 compare() 메소드를 오버라이딩해 기존의 정렬 기준 재정의 -> 여러 개의 정렬 가능 |
- Collections.sort()
Collections.sort(List<T> list)
// T객체에 Comparable을 상속받아 compareTo 메소드 재정의를 통해 정렬 구현(단 한개의 정렬)
Collections.sort(List<T> list, Comparator<T> c)
// 지정한 Comparator클래스에 의한 정렬(여러개의 정렬)
Set
저장 순서가 유지되지 않고, 중복 객체도 저장하지 못하게 하는 자료 구조
null도 중복을 허용하지 않기 때문에 1개의 null만 저장
구현 클래스로 HashSet, LinkedSet, TreeSet이 있음
- Set 계열 주요 메소드
기능 | 메소드 | 리턴타입 | 설명 |
객체 추가 | add(E e) | boolean | 주어진 객체를 맨 끝에 추가 |
addAll(Collection<? extends E> c) | boolean | 주어진 Collection 타입 객체를 리스트에 추가 | |
객체 검색 | contains(Object o) | boolean | 주어진 객체가 저장되어 있는지 여부 |
iterator() | Iterator<E> | 저장된 객체를 한번씩 가져오는 반복자 리턴 | |
isEmpty() | boolean | 컬렉션이 비어 있는지 조사 | |
size() | int | 저장되어 있는 전체 객체수를 리턴 | |
객체 삭제 | clear() | void | 저장된 모든 객체를 삭제 |
remove(Object o) | boolean | 주어진 객체를 삭제 | |
*전체 객체 대상으로 한 번씩 반복해서 가져오는 반복자(Iterator)를 제공 인덱스로 객체에 접근할 수 없음 |
- HashSet
Set에 객체를 저장할 떄 hash함수를 사용하여 처리 속도가 빠름
동일 객체 뿐 아니라 동등 객체도 중복하여 저장하지 않음
- LinkedHashSet
HashSet과 거의 동일하지만 Set에 추가되는 순서를 유지한다는 점이 다름
Enumeration, Iterator, Listlterator
컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스
- Enumeration: Iterator의 구버전
- Listleraror: Iterator를 상속받아 양방향 특징
- 주요 메소드
Iterator<E> | boolean hasNext() | 앞에서부터 검색 |
E next() | ||
Listlterator<E> | boolean hasNext() | 앞에서부터 검색 |
E next() | ||
boolean hasPrevious() | 뒤에서부터 검색 | |
E previous() |
'Java > Java 개념' 카테고리의 다른 글
22. Thread(스레드) (0) | 2022.10.11 |
---|---|
21 - 2. Map, Properties, Stack, Queue, Deque (0) | 2022.10.11 |
20. File (0) | 2022.10.11 |
19. 입출력(IO) (0) | 2022.10.06 |
18. 예외처리 (0) | 2022.10.05 |