본문 바로가기
백엔드

[Java] Collection - 1. Collection Framework

by BeforB 2022. 7. 5.
728x90

1. Collection Interface 

2. Iterable Interface 

3. List Interface 

    1) ArrayList  

    2) LinkedList  

    3) Vector  

4. Stack Interface 

5. Queue Interface 

    1) PriorityQueue  

6. Set Interface 

7. SortedSet Interface 

8. Map Interface 

    1) HashMap  

 

 

 

* 아래 링크를 참고하여 번역 및 추가 정리 하였습니다.

https://www.geeksforgeeks.org/collections-in-java-2/

 

Collections in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

 

 

 

 

Java Collection Framework 계층구조

Java Collection Framework 계층구조

 

 

 

Collection Framework

1. Collection Interface

Collection 프레임워크에는 모든 인터페이스가 특정 유형의 데이터를 저장하기 위해 사용되는 여러 인터페이스(List, Set, Map, …) 등이 포함되어 있다. 또한 Collection 인터페이스는 Iterable 인터페이스를 상속받고 있으므로 모든 컬렉션 인터페이스와 클래스는 Iterable을 implement한다.

Collection 인터페이스는 다른 모든 컬렉션 인터페이스들에서 사용하는 데이터 추가, 삭제와 같은 기본 메소드들을 모두 포함한다.

// Collection.class
public interface Collection<E> extends Iterable<E> {
	// ...
}

 

 

2. Iterable Interface

Iterable 인터페이스는 iterator 메서드를 가지고 있으며 collection 반복자를 제공한다.

// Iterable.class
public interface Iterable<T> {
    /**
     * Returns an iterator over elements of type {@code T}.
     * @return an Iterator.
     */
    Iterator<T> iterator();
		
		// ...
}

 

3. List Interface

Collection 인터페이스의 자식 인터페이스로, 데이터의 중복을 허용하고 순서를 지키는 collection이다. ArrayList, Vector, Stack과 같이 다양한 클래스로 구현되어 있다. List interface에 대해서는 다음 포스팅에 자세히 다룰 것이기 때문에 여기서는 간단히 정리해보려고 한다.

 

1) ArrayList

ArrayList는 자바에서 동적 배열을 제공한다. 자바의 기본 배열(ex - int[] arr = new int[3])보다는 느릴 수 있으나  element의 추가/삭제 등의 조작이 빈번하게 일어나는 경우 유용하게 사용된다. 데이터 타입은 primitive type이 아닌 wrapper class를 사용해야 한다.

ArrayList - 동기화되어 있지 않음

 

2) LinkedList

LinkedList 클래스는 LinkedList 데이터 구조의 구현체로 ArrayList와는 다르게 구현되어 있다. 데이터가 연속된 구조에 저장되지 않고 포인터와 주소를 이용한 선형 자료구조에 의해 저장된다. 

 

3) Vector

Vector 클래스는 자바에서 동적 배열을 제공하며, ArrayList와 내부적으로는 동일하게 구현되어 있다. 다만 차이점은 Vector는 동기화되어 있기 때문에 thread-safe하며, ArrayList는 동기화되어 있지 않다.

Vector - 동기화되어 있음(synchronized)

 

 

4. Stack Interface

Stack 클래스는 Stack 데이터 구조의 구현체이며 LIFO(Last In First Out), 즉 후입선출형 자료구조이다.

Vector 클래스를 상속하기 때문에 동기화되어 있어 thread-safe하나 non thread-safe하거나 더 빠른 자료구조를 원할 경우 ArrayDequeue로 대체할 수 있다.

Stack<String> stack = new Stack<String>();
stack.push("First");
stack.push("Second");
stack.push("Third");

while(!stack.isEmpty()) {
    System.out.print(stack.pop() + " "); 
}

// 실행결과
Third Second First

 

 

5. Queue Interface

Queue는 FIFO(First In First Out), 즉 먼저 들어간 element가 먼저 나오는 선입선출형 자료구조이다. 선착순과 같이 순서가 중요한 자료구조가 필요할 경우 사용된다.

PriorityQueue, ArrayDequeue 등 다양한 구현체들이 있으며, 그 중 PriorityQueue가 가장 많이 사용된다.

 

 

1) PriorityQueue

기본적으로 큐는 선입선출 알고리즘을 따르지만, 큐의 엘리먼트들을 우선순위에 따라 정렬하고 싶을 경우 PriorityQueue를 사용한다. 아무것도 정의하지 않았을 때 기본적으로 제공되는 정렬 알고리즘을 따르며, 정렬 기준을 변경하고 싶을 경우 Comparator를 이용하여 커스텀할 수 있다.

PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
  
pq.add(30);
pq.add(17);
pq.add(25);

while(!pq.isEmpty()) {
    System.out.println(pq.poll());
}

 

 

6. Set Interface

 

 

7. Sorted Set Interface

 

 

8. Map Interface

 

 

 

 

 

 

 

 

728x90

댓글