본문 바로가기

자바(Java)

Java Collection - 1

반응형

1. Collection이란?


자바에서 데이터를 저장, 관리, 조작하는 데 사용되는 인터페이스와 클래스의 계층 구조이다.

요약하면, Java Collection은 자료구조 및 알고리즘을 구현해 놓은 일종의 라이브러리로, 제네릭 기반으로 구현되어 있다. 이를 활용하여 다양한 애플리케이션에서 효율적인 데이터 관리를 할 수 있다.
*Java Collection Framework: 다양한 데이터 구조 제공, 데이터의 저장, 탐색, 정렬, 필터링 등 지원

Java Collection Framework

2. List<E> 인터페이스


List<E> 인터페이스는 자바 컬렉션 프레임워크(Collection Framework)의 일부로, 순서가 있는 요소의 컬렉션을 나타낸다. List는 중복된 요소를 허용하며, 각 요소는 인덱스를 통해 접근할 수 있다. 이 인터페이스는 자바의 java.util 패키지에 속해 있다.

 

1) 주요 특징

(1) 순서 있음
List는 요소들을 특정 순서로 저장한다. 요소들은 인덱스를 사용하여 접근할 수 있으며, 추가된 순서대로 유지된다.

(2) 중복 요소 허용
List는 동일한 요소를 여러 번 포함할 수 있다. 따라서 같은 값을 가진 요소를 중복해서 추가할 수 있다.

2) 주요 메서드

  • void add(int index, E element): 지정된 위치에 요소를 추가한다. 해당 위치 이후의 요소들은 오른쪽으로 밀려난다.
  • boolean remove(Object element): 주어진 요소를 제거한다. 요소가 존재하면 제거하고 true를 반환하며, 존재하지 않으면 false를 반환한다.
  • E get(int index): 주어진 인덱스에 위치한 요소를 반환한다.
  • E set(int index, E element): 주어진 인덱스에 위치한 요소를 새로운 요소로 대체하고 이전 요소를 반환한다.
  • int size(): List에 포함된 요소의 개수를 반환한다.
  • boolean contains(Object element): List가 주어진 요소를 포함하고 있는지 확인한다.
  • Iterator<E> iterator(): List의 요소들을 반복하는 데 사용할 수 있는 Iterator 객체를 반환한다.

3) 주요 클래스

(1) ArrayList<E>: 배열 기반 자료구조로, 배열을 이용하여 인스턴스에 저장

  • 내부적으로 동적 배열(dynamic array)로 구현되어 있다.
  • 요소들은 인덱스를 통해 접근되며, 인덱스 기반 연산에 빠른 성능을 지닌다.
  • 데이터의 삽입과 삭제가 느리지만, 요소에 접근하는 데에는 빠르다.
  • 요소들은 연속된 메모리 공간에 저장되며, 배열의 크기를 동적으로 조정할 수 있다.
  • 데이터를 읽는(read) 작업이 빈번하고, 크기 변경이 적은 경우에 적합하다.


(2) LinkedList<E>: 리스트 기반 자료구조로, 리스트를 구성하여 인스턴스에 저장

  • 내부적으로 연결 리스트(linked list)로 구현되어 있다.
  • 요소들은 각각의 노드(node)에 저장되고, 각 노드는 이전 노드와 다음 노드에 대한 참조를 가지고 있다.
  • 요소들은 순서가 유지되며, 삽입과 삭제가 빠릅니다. 중간에 요소를 삽입하거나 삭제하는 작업에 적합하다.
  • 요소에 접근하기 위해서는 처음부터 순차적으로 탐색해야 하므로, 인덱스 기반 연산은 느리다.
  • 요소들이 메모리에서 분산되어 저장되며, 각 노드가 다음 노드를 가리키는 포인터를 가지고 있다.
  • 데이터를 삽입하고 삭제하는 작업이 빈번하며, 요소에 대한 반복적인 조작이 필요한 경우에 적합하다.

3. Set<E> 인터페이스


Set<E> 인터페이스는 자바 컬렉션 프레임워크(Collection Framework)의 일부로, 중복 요소를 허용하지 않는 요소의 컬렉션을 나타낸다. Set은 유일한 요소들로 이루어진 집합을 표현하며, 순서를 보장하지 않는다.

 

1) 주요 특징

(1) 중복 요소 없음
Set은 동일한 요소를 중복해서 포함하지 않는다. 따라서 Set에 요소를 추가할 때 이미 존재하는 요소와 동일한 값을 가진다면 추가되지 않는다.

(2) 순서 없음
Set은 요소들을 특정 순서로 저장하지 않는다. 따라서 요소들을 접근할 때는 순서에 의존할 수 없으며, 인덱스를 사용하여 요소에 접근할 수 없다. 순서가 필요한 경우에는 SortedSet을 사용해야 한다.

 

2) 주요 메서드

  • boolean add(E element): Set에 주어진 요소를 추가한다. 이미 요소가 존재하면 추가되지 않고 false를 반환한다.
  • boolean remove(Object element): Set에서 주어진 요소를 제거한다. 요소가 존재하면 제거하고 true를 반환하며, 존재하지 않으면 false를 반환한다.
  • boolean contains(Object element): Set이 주어진 요소를 포함하고 있는지 확인한다.
  • int size(): Set에 포함된 요소의 개수를 반환한다.
  • Iterator<E> iterator(): Set의 요소들을 반복하는 데 사용할 수 있는 Iterator 객체를 반환한다.

3) 자주 사용하는 클래스

(1) HashSet
HashSet은 해시 테이블을 사용하여 요소들을 저장한다. 내부적으로 HashMap을 기반으로 구현되어 있다. 해시 테이블은 요소들을 해시 함수를 통해 해시 버킷에 저장하므로, 요소들의 순서가 보장되지 않는다. HashSet은 평균적으로 O(1)의 상수 시간으로 요소를 추가, 제거, 확인할 수 있는 빠른 성능을 제공한다.

 

*HashSet 요약

  • 중복 요소를 허용하지 않음.
  • 요소들의 순서를 보장하지 않음.
  • 내부적으로 해시 테이블(HashMap)을 사용하여 구현됨.
  • hashCode( ) 메소드를 override하여 해쉬 알고리즘을 정의할 수도 있음.

(2) TreeSet
TreeSet은 이진 검색 트리를 사용하여 요소들을 저장한다. 내부적으로 TreeMap을 기반으로 구현되어 있다. 이진 검색 트리는 요소들을 정렬된 순서로 유지하므로, TreeSet에서 요소들은 기본적으로 오름차순으로 정렬된다. 정렬 순서는 요소의 자연적 순서 또는 사용자가 지정한 Comparator에 의해 결정된다. TreeSet은 평균적으로 O(log n)의 시간으로 요소를 추가, 제거, 확인할 수 있다.

 

*TreeSet 요약

  • 중복 요소를 허용하지 않음.
  • 요소들의 순서를 정렬하여 유지함.
  • 내부적으로 이진 검색 트리(TreeMap)를 사용하여 구현됨.

4. QUEUE<E> 인터페이스


Queue<E> 인터페이스는 자바 컬렉션 프레임워크(Collection Framework)에서 Queue를 구현하기 위한 인터페이스이다. Queue는 FIFO(First-In-First-Out) 원칙에 따라 요소를 저장하고 처리하는 자료구조를 나타낸다.


1) 주요 특징

(1) FIFO(First-In-First-Out)

Queue는 요소들을 추가한 순서대로 처리한다. 가장 먼저 추가된 요소가 가장 먼저 처리되는 FIFO 원칙을 따른다.

(2) 요소 추가와 제거

Queue는 요소의 추가와 제거를 지원한다. 새로운 요소는 일반적으로 큐의 끝에 추가되며, 제거되는 요소는 보통 큐의 시작 부분에서 발생한다.


2) 주요 메서드

  • boolean add(E element): 주어진 요소를 큐에 추가한다. 큐에 더 이상 공간이 없는 경우 예외를 발생시킨다.
  • boolean offer(E element): 주어진 요소를 큐에 추가한다. 큐에 공간이 부족한 경우 false를 반환한다.
  • E remove(): 큐의 첫 번째 요소를 제거하고 반환한다. 큐가 비어있는 경우 예외를 발생시킨다.
  • E poll(): 큐의 첫 번째 요소를 제거하고 반환한다. 큐가 비어있는 경우 null을 반환한다.
  • E element(): 큐의 첫 번째 요소를 반환한다. 큐가 비어있는 경우 예외를 발생시킨다.
  • E peek(): 큐의 첫 번째 요소를 반환한다. 큐가 비어있는 경우 null을 반환한다.

3) 자주 사용하는 클래스

(1) LinkedList<E>

해당 클래스는 List<E>와 동시에 Queue<E>를 구현하는 컬렉션 클래스이다. 따라서 어떠한 타입의 참조변수로 참조하느냐에 따라 ‘리스트’로도 ‘큐’로도 동작한다.

5. MAP<Key, Value> 인터페이스


Map<K, V> 인터페이스는 자바 컬렉션 프레임워크(Collection Framework)의 일부로, 키(key)와 값(value)의 쌍으로 이루어진 데이터를 저장하고 관리하는데 사용된다.


1) 주요 특징

(1) 키-값 쌍
저장 Map은 키와 값의 쌍으로 이루어진 데이터를 저장한다. 각 키는 고유해야 하며, 하나의 키에는 하나의 값만 연결될 수 있다.


2) 주요 메서드

  • V put(K key, V value): 주어진 키와 값을 맵에 저장합니다. 이미 동일한 키가 존재한다면 기존 값은 새 값으로 대체되고, 기존 값을 반환한다.
  • V get(Object key): 주어진 키에 해당하는 값을 반환한다. 만약 키가 존재하지 않는다면 null을 반환한다.
  • boolean containsKey(Object key): 주어진 키가 맵에 존재하는지 확인한다.
  • boolean containsValue(Object value): 주어진 값이 맵에 존재하는지 확인한다.
  • V remove(Object key): 주어진 키에 해당하는 키-값 쌍을 맵에서 제거하고 해당 값을 반환한다.
  • int size(): 맵에 저장된 키-값 쌍의 개수를 반환한다.
  • boolean isEmpty(): 맵이 비어있는지 확인한다.
  • Set<K> keySet(): 맵에 저장된 모든 키를 포함하는 Set 컬렉션을 반환한다.

3) 자주 사용하는 클래스

(1) HashMap<key, value>

HashMap은 해시 테이블을 사용하여 구현된 Map의 구현 클래스이다. 키-값 쌍의 데이터를 저장하고 검색하는 데 사용된다. 해시 테이블은 키를 해시 함수를 통해 해시 코드로 변환하고, 이 코드를 기반으로 데이터를 저장하고 검색한다. HashMap은 순서를 보장하지 않으며, 키와 값에 null을 허용한다.

 

*HashMap 요약

  • 순서를 보장하지 않음.
  • 해시 테이블을 기반으로 데이터 저장 및 검색.
  • O(1)의 상수 시간 복잡도로 데이터를 추가, 제거, 검색할 수 있는 빠른 성능.
  • 키와 값에 null을 허용.

(2) LinkedHashMap<key, value>

LinkedHashMap은 해시 테이블과 연결 리스트를 사용하여 구현된 Map의 구현 클래스이다. HashMap과 유사하지만, 요소들의 순서를 보장한다. 요소들은 추가된 순서 또는 접근된 순서대로 유지된다. 즉, LinkedHashMap은 순서를 기억하는 HashMap이다.

 

*LinkedHashMap 요약

  • 요소들의 순서를 보장함.
  • 해시 테이블과 연결 리스트를 사용하여 데이터 저장 및 검색.
  • HashMap과 유사한 O(1)의 상수 시간 복잡도로 데이터를 추가, 제거, 검색할 수 있는 빠른 성능.
  • 키와 값에 null을 허용.

(3) TreeMap<key, value>

TreeMap은 이진 검색 트리를 사용하여 구현된 Map의 구현 클래스이다. 키를 기준으로 요소들을 정렬된 순서로 유지한다. TreeMap은 기본적으로 키의 자연적 순서 또는 사용자가 지정한 Comparator에 따라 정렬된다.

 

*TreeMap 요약

  • 요소들의 정렬된 순서를 보장함.
  • 이진 검색 트리를 사용하여 데이터 저장 및 검색.
  • 요소들의 정렬 순서에 따라 데이터 접근 및 탐색 가능.
  • 추가, 제거, 검색에 O(log n)의 시간 복잡도를 가짐.
  • 키와 값에 null을 허용하지 않음.
반응형

'자바(Java)' 카테고리의 다른 글

Java - 람다식  (0) 2023.08.11
Java Collection - 2  (0) 2023.07.19
Java Generic  (0) 2023.07.03
Java 싱글톤 패턴(SingleTon Pattern) / 게터&세터(Getter & Setter)  (0) 2023.03.03
Java 클래스(class)란?  (0) 2023.03.01