AngelPlayer`s Diary

컬렉션

컬렉션

다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법

데이터의 저장 및 관리와 관련되어 있는 알고리즘을 클래스로 구현해 놓은 것

 

 

컬렉션 인터페이스

컬렉션을 구현하기 위한 인터페이스는 크게

 

- 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 타입 배열로 변환

 

 

List 컬렉션 클래스

특징

순서가 있음(저장 순서)

같은 요소의 중복 저장 허용

 

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 컬렉션 클래스

특징

요소의 저장 순서를 유지하지 않음 (순서가 없음)

같은 요소의 중복 저장 불가능

 

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 타입의 배열로 반환

 

 

 

Map 컬렉션 클래스

특징

key-value 방식

요소의 저장 순서가 없음

키의 중복 불가능

 

Map 컬렉션의 종류는

HashMap<K, V>
Hashtable<K, V>
TreeMap<K, V>

가 있음

 

 

 

Iterator

반복자

컬렉션에 저장된 요소를 읽어오는 방법

향샹된 for문으로 일부 기능 대체 가능함

Iterator<Integer> iter = lnkList.iterator();

 

- Iterator 메소드

boolean hasNext() 다음 요소를 가지면 true, 없으면 false
E next() iteration의 다음 요소 반환
default void remove() 반복자가 적용된 컬렉션의 마지막 요소 제거

 

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band