본문 바로가기
Java Study

Collection 인터페이스

by xogns93 2024. 7. 18.

Collection Interface

 

Java의 Collection 인터페이스는 컬렉션 프레임워크의 루트 인터페이스로, 다양한 데이터 구조를 표현하는 공통된 메서드를 정의합니다. 이 인터페이스는 여러 컬렉션 클래스를 위한 공통된 동작을 제공하며, 컬렉션을 조작하는 메서드를 정의합니다.

 

 

주요 메서드

Collection 인터페이스에서 제공하는 주요 메서드는 다음과 같습니다.

 

  1. 크기 관련 메서드
    • int size(): 컬렉션에 포함된 요소의 수를 반환합니다.
    • boolean isEmpty(): 컬렉션이 비어 있는지 여부를 반환합니다.
  2. 추가 및 제거
    • boolean add(E e): 지정된 요소를 컬렉션에 추가합니다.
    • boolean remove(Object o): 지정된 요소를 컬렉션에서 제거합니다.
    • boolean addAll(Collection<? extends E> c): 지정된 컬렉션의 모든 요소를 이 컬렉션에 추가합니다.
    • boolean removeAll(Collection<?> c): 지정된 컬렉션에 포함된 이 컬렉션의 모든 요소를 제거합니다.
    • boolean retainAll(Collection<?> c): 이 컬렉션에서 지정된 컬렉션에 포함된 요소만 유지하고 다른 모든 요소를 제거합니다.
    • void clear(): 컬렉션의 모든 요소를 제거합니다.
  3. 탐색 및 검사
    • boolean contains(Object o): 지정된 요소가 이 컬렉션에 포함되어 있는지 여부를 반환합니다.
    • boolean containsAll(Collection<?> c): 지정된 컬렉션의 모든 요소가 이 컬렉션에 포함되어 있는지 여부를 반환합니다.
    • Iterator<E> iterator(): 이 컬렉션의 요소에 대해 반복을 수행하는 반복자를 반환합니다.
  4. 배열로 변환
    • Object[ ] toArray( ): 컬렉션의 모든 요소를 포함하는 배열을 반환합니다.
    • <T> T[ ] toArray(T[ ] a): 지정된 배열에 컬렉션의 모든 요소를 저장합니다.

 


구현 클래스

Collection 인터페이스를 직접 구현하는 클래스는 없으며, 이를 상속하는 몇 가지 서브 인터페이스와 해당 서브 인터페이스를 구현하는 클래스들이 있습니다.

 

서브 인터페이스

  1. List
    • 순서가 있는 컬렉션으로, 요소의 중복을 허용합니다.
    • 구현 클래스: ArrayList, LinkedList, Vector, Stack
  2. Set
    • 중복을 허용하지 않는 컬렉션입니다.
    • 구현 클래스: HashSet, LinkedHashSet, TreeSet
  3. Queue
    • FIFO(First-In-First-Out) 순서로 요소를 처리하는 컬렉션입니다.
    • 구현 클래스: LinkedList, PriorityQueue
  4. Deque
    • 양쪽 끝에서 요소를 추가하거나 제거할 수 있는 이중 연결 리스트입니다.
    • 구현 클래스: ArrayDeque, LinkedList
  5. Map
    • 키-값 쌍을 저장하는 컬렉션입니다.
    • Map 인터페이스는 Collection 인터페이스를 상속하지 않지만, 자주 함께 사용됩니다.
    • 구현 클래스: HashMap, TreeMap, LinkedHashMap, Hashtable

 

 

다음은 다양한 Collection 인터페이스의 구현 클래스를 사용하는 예제입니다.

package com.example.collections;

import java.util.ArrayList;
import java.util.Collection;

public class ArrayListExample {
    public static void main(String[] args) {
        // ArrayList 생성
        Collection<String> list = new ArrayList<>();
        
        // 요소 추가
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        
        // 요소 존재 여부 확인
        System.out.println("Contains 'Banana': " + list.contains("Banana"));
        
        // 컬렉션의 크기 확인
        System.out.println("Size: " + list.size());
        
        // 요소 제거
        list.remove("Banana");
        
        // 컬렉션이 비어 있는지 확인
        System.out.println("Is Empty: " + list.isEmpty());
        
        // 컬렉션의 요소 출력
        for (String fruit : list) {
            System.out.println("Element: " + fruit);
        }
    }
}

이 예제에서는 ArrayList를 사용하여 Collection 인터페이스의 주요 메서드를 보여줍니다. ArrayList에 요소를 추가하고, 존재 여부를 확인하며, 크기를 확인하고, 요소를 제거하고, 컬렉션이 비어 있는지 확인하며, 모든 요소를 반복하여 출력합니다.

Contains 'Banana': true
Size: 3
Is Empty: false
Element: Apple
Element: Orange

 


Bulk

"Bulk"라는 용어는 자바의 컬렉션 프레임워크에서 여러 요소를 한 번에 처리하는 작업을 의미합니다. 이는 개별 요소를 하나씩 처리하는 것보다 효율적입니다. "Bulk" 연산은 컬렉션의 여러 요소를 동시에 추가, 제거 또는 검사하는 메서드를 포함합니다.

주요 Bulk 연산

  1. addAll(Collection<? extends E> c): 컬렉션의 모든 요소를 현재 컬렉션에 추가합니다.
  2. removeAll(Collection<?> c): 현재 컬렉션에서 주어진 컬렉션의 모든 요소를 제거합니다.
  3. retainAll(Collection<?> c): 현재 컬렉션에서 주어진 컬렉션에 포함된 요소만 유지합니다.
  4. containsAll(Collection<?> c): 현재 컬렉션이 주어진 컬렉션의 모든 요소를 포함하는지 확인합니다.

 

다음은 ArrayList를 사용하여 주요 bulk 연산을 보여주는 예제입니다:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class BulkOperationsExample {
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>(Arrays.asList("Apple", "Banana", "Cherry"));
        List<String> list2 = Arrays.asList("Banana", "Date", "Fig");

        // addAll: list2의 모든 요소를 list1에 추가
        list1.addAll(list2);
        System.out.println("After addAll: " + list1);

        // removeAll: list2의 모든 요소를 list1에서 제거
        list1.removeAll(list2);
        System.out.println("After removeAll: " + list1);

        // retainAll: list2에 포함된 요소만 list1에 유지
        list1.addAll(list2);
        list1.retainAll(list2);
        System.out.println("After retainAll: " + list1);

        // containsAll: list1이 list2의 모든 요소를 포함하는지 확인
        boolean containsAll = list1.containsAll(list2);
        System.out.println("Contains all elements of list2: " + containsAll);
    }
}

 

After addAll: [Apple, Banana, Cherry, Banana, Date, Fig]
After removeAll: [Apple, Cherry]
After retainAll: [Banana, Date, Fig]
Contains all elements of list2: true

 

'Java Study' 카테고리의 다른 글

자바(JAVA)의 예외(Exception)  (0) 2024.07.19
LinkedList  (0) 2024.07.18
HashSet과 HashMap  (0) 2024.07.18
Type Erasure(타입 소거)  (0) 2024.07.18
@ 어노테이션 (Annotation)  (0) 2024.07.18