본문 바로가기
면접 대비 프로그래밍 지식/프로그래밍 언어

[JAVA] 컬렉션(Collection) 정리

by 기초백과 2021. 2. 9.

[JAVA] Java 컬렉션(Collection) 정리

 

 Java Collections Framework(JCF)

Java에서 컬렉션(Collection)이란 데이터의 집합, 그룹을 의미하며

 

JCF(Java Collections Framework)는 이러한 데이터,

자료구조인 컬렉션과 이를 구현하는 클래스를 정의하는 인터페이스를 제공한다.

 

다음은 Java 컬렉션 프레임워크의 상속구조를 나타낸다.

Collection 인터페이스는 List, Set, Queue로 크게 3가지 상위 인터페이스로 분류할 수 있다.

그리고 여기에 Map의 경우 Collection 인터페이스를 상속받고 있지 않지만 Collection으로 분류된다.

(그림 1) 자바에서의 컬렉션 상속 관계

 제네릭(Generic)

제네릭(Generic)이란 데이터 형식에 의존하지 않고, 하나의 값이

여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식이다.

자바의 Collection이 제네릭 프로그래밍이 적용된 대표적인 인터페이스이며

<>안에 클래스를 기입하는 형식을 통해 이루어진다.

 

 Collection 인터페이스의 특징

인터페이스 특징
List 순서를 유지하는 데이터의 집합으로
데이터의 중복을 허용한다.
Queue List와 유사하지만 원소를 반환, 삭제 시 맨 앞의 원소부터 처리되며
추가 시에는 맨 뒤로 추가된다.
Set 순서를 유지하지 않는 데이터의 집합으로 
데이터의 중복을 허용하지 않는다.
Map 키(Key), 값(Value)의 쌍으로 이루어진 데이터의 집합으로
순서는 유지되지 않으며 키(Key)의 중복은 허용되지 않고,
값(Value)의 중복은 허용된다.

 Collection 인터페이스를 상속받은 클래스의 특징

 

1. List

특징 : 순서(O), 중복(O)

  • LinkedList
    - 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조
    - 데이터를 담는 노드들이 연결되어 있고, 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당
  • ArrayList
    - 동기화(Syncronized)가 적용되지 않는 콜렉션 클래스이다.
  • Vector
    - 동기화(Syncronized)가 적용되는 클래스로 멀티 스레드 환경에 적합하다.
  • Stack
    - 선입후출(FILO)의 자료구조로 데이터의 삽입 시 맨 뒤에 삽입되고 삭제 시에도 맨 뒤의 원소가 삭제된다.

 

2. Queue

특징 : 선입선출(FIFO)

  • PriorityQueue
    - 자료구조 내의 원소들이 우선 순위에 따라 정렬되어 있다.
    - Comporator나 Comparable을 통해 여러 정렬 조건을 가질 수 있다.
  • LinkedList
    - 우선 순위를 고려하지 않은 Queue 자료구조를 사용하려 할때 사용할 수 있다.

3. Set

특징 : 순서(X), 중복(X)

  • HashSet
    - 임의 접근 속도가 가장 빠르다
  • LinkedHashSet
    - 연결 리스트로 구현된 HashSet이다.
  • TreeSet
    - 정렬 방법을 지정할 수 있는 Set 자료구조이다.

4. Map

특징 : 키(Key), 값(Value)의 쌍으로 이루어짐 / 순서(X), 키(Key)는 중복(X),  값(Value)는 중복(O)

  • HashTable
    - HashMap보다는 느리지만 동기화 지원
    - null 불가
  • HashMap
    - 중복과 순서가 허용되지 않으며 null값이 올 수 있다.
  • TreeMap
    - 정렬된 순서대로 키(Key)와 값(Value)을 저장하여 검색이 빠름

■ 순서를 갖지 않는 Collection을 순회하기 위한 Itorator

Map과 Set은 순서를 갖지 않아 이를 순회할 수 없다.

이는 Itorator로 각 원소를 쪼개 담아 순회할 수 있다.

public static void main(String args[]){
    Set<String> stringSet = new HashSet<>();
    Itorator<String> setItor = stringSet.iterator();
    
    while(setItor.hasNext()){
    	System.out.println(setItor.next());
    }  
}

 

'면접 대비 프로그래밍 지식 > 프로그래밍 언어' 카테고리의 다른 글

[JAVA] Comparable과 Comparator  (0) 2021.02.15
[JAVA]람다식  (0) 2021.02.09