컬렉션
다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법
데이터의 저장 및 관리와 관련되어 있는 알고리즘을 클래스로 구현해 놓은 것
컬렉션 인터페이스
컬렉션을 구현하기 위한 인터페이스는 크게
- List 인터페이스 : 순서 있음, 중복 허용
Vector, ArrayList, LinkedList, Stack, Queue
- Set 인터페이스 : 선서 없음, 중복 불가
HashSet, TreeSet
- Map 인터페이스 : 키와 값의 쌍으로 이루어지는 데이터의 집합, 순서 없음, 키 중복 불가
HashMap, TreeMap, Hashtable, Properties
로 구분
이때 Map은 Collection 인터페이스를 상속받아 구현되지는 않지만 Collection으로 분류
컬렉션 인터페이스 메소드
boolean add(E e) | 컬렉션 요소 추가 |
void clear() | 컬렉션 모든 요소 제거 |
boolean contains(Object o) | 컨렉션이 전달된 객체를 포함하는지 확인 |
boolean equals(Object o) | 컬렉션과 전달된 객체가 같은지 확인 |
boolean isEmpty() | 컬렉션이 비어있는지 확인 |
Iterator<E> iterator() | 컬렉션의 반복자 반환 |
boolean remove(Object o) | 컬렉션에 전달된 객체를 제거 |
int size() | 컬렉션 요소 총 개수 반환 |
Object toArray() | 컬렉션 모든 요소를 Object 타입 배열로 변환 |
특징
순서가 있음(저장 순서)
같은 요소의 중복 저장 허용
ArrayList<E>
배열을 이용하여 요소를 저장
배열의 크기가 선언 시 지정되며, 크기를 늘리기 위해서는 새로 생성(자동적으로 진행됨, 처리 시간이 긺)
LinkedList<E>
연결 리스트를 이용하여 요소를 저장함
다음 요소로 접근이 빠름, 이전 요소로 접근이 어려움 -> 이중 연결 리스트를 사용함
Vector<E>
ArrayList 클래스와 같은 동작을 수행
-> ArrayList 사용을 권장함
List 인터페이스 메소드
E get(int index) | 리스트 내 특정 위치 요소 반환 |
E set(int index, E e) | 특정 위치에 요소를 전달받은 객체로 대체 |
Stack<E>
List 컬렉션 클래스의 Vector 클래스를 상속
LIFO(후입선출) 방식
Deque를 사용하면 연산 속도가 더 빠른 스택을 사용할 수 있음
Stack<Integer> st = new Stack<Integer>(); // 스택의 생성
Deque<Integer> st = new ArrayDeque<Integer>(); // 속도가 빠른 스택
- Strack<E>의 메소드
boolean empty() | 스택이 비어있으면 true, 아니면 false |
E peek() | 스택의 가장 상단 요소를 반환 |
E pop() | 스택의 가장 상단의 요소를 반환 후, 요소를 스택에서 제거 |
E push(E item) | 스택에 요소를 삽입 |
int Search(Object o) | 스택에 전달된 객체가 존재하는 위치 인덱스 반환 |
Queue<E>
Queue는 별도의 인터페이스 형태로 제공함
FIFO(선입선출) 방식
Queue의 하위 인터페이스는
Deque<E>
BlockingDeque<E>
BlockingQueue<E>
TransferQueue<E>
등이 존재
Queue 사용 시 LinkedList를 가장 많이 사용함
Deque를 사용하면 더 빠른 큐를 사용할 수 있음
-> Deque는 속도가 더 빠르며, 스택과 큐를 모두 구현할 수 있음
LinkedList<String> qu = new LinkedList<String>(); // 큐의 생성
Deque<String> qu = new ArrayDeque<String>(); // 속도가 빠른 큐
- Queue 인터페이스 메소드
boolean add(E e) | 큐에 전달 요소 삽입 삽입 성공 시 true, 공간 부족으로 실패 시 exception() |
E element() | 큐의 요소를 반환 |
boolean offer(E e) | 큐에 요소 삽입 |
E peek() | 큐의 요소 반환, 큐가 비어있으면 null 반환 |
E poll() | 큐의 요소를 반환 후 제거, 큐가 비어있으면 null 반환 |
E remove() | 큐의 요소(하나)를 제거 |
특징
요소의 저장 순서를 유지하지 않음 (순서가 없음)
같은 요소의 중복 저장 불가능
Set 컬렉션 클래스에 속하는 클래스의 종류로
HashSet<E>
TreeSet<E>
이 있음
HashSet<E>
해시 알고리즘을 사용하여 검색 속도가 매우 빠름
중복 값을 입력하려고 .add()를 사용하면 false를 반환
HashSet<String> hs01 = new HashSet<String>();
해시 알고리즘
해시 함수를 통해 데이터 저장 주소를 해시 테이블에 저장하고, 테이블을 통해서 저장 위치를 찾음
자바의 해시 알고리즘은 배열과 연결 리스트를 통해서 구현
TreeSet<E>
이진 검색 트리 형태로 요소를 저장함
데이터 추가, 제거 동작 시간이 매우 빠름
Red-Black tree로 구현됨
TreeSet<Integer> ts = new TreeSet<Integer>();
Set 인터페이스 메소드
boolean add(E e) | set에 요소를 추가 |
void clear() | set의 모든 요소를 제거 |
boolean contains(Object o) | set이 해당 객체를 포함하고 있는지를 확인 |
boolean equals(Object o) | set과 전달된 객체가 같은지를 확인 |
boolean isEmpty() | set이 비어있는지를 확인 |
Iterator<E> iterator() | set의 iterator를 반환 |
boolean remove(Object o) | set에서 전달된 객체를 제거 |
int size() | set 요소의 총 개수를 반환 |
Object[] toArray() | set의 모든 요소를 Object 타입의 배열로 반환 |
특징
key-value 방식
요소의 저장 순서가 없음
키의 중복 불가능
Map 컬렉션의 종류는
HashMap<K, V>
Hashtable<K, V>
TreeMap<K, V>
가 있음
반복자
컬렉션에 저장된 요소를 읽어오는 방법
향샹된 for문으로 일부 기능 대체 가능함
Iterator<Integer> iter = lnkList.iterator();
- Iterator 메소드
boolean hasNext() | 다음 요소를 가지면 true, 없으면 false |
E next() | iteration의 다음 요소 반환 |
default void remove() | 반복자가 적용된 컬렉션의 마지막 요소 제거 |
[Java] 실수형 출력하기 (소수점 아래 자릿수, "."으로 자르기) (0) | 2023.01.29 |
---|---|
[Java] Java 주요 개념 요약 정리 (예외 처리, 스레드) (0) | 2022.11.01 |
[Java] Java 주요 개념 요약 정리 (제네릭) (0) | 2022.10.21 |
[Java] Java 주요 개념 요약 정리 (다형성) (0) | 2022.10.20 |
[Java] Java 주요 개념 요약 정리 (클래스) (0) | 2022.10.19 |