JAVA

[JAVA] Collection - 사용 방법

빙응이 2023. 11. 28. 20:03

📝 JAVA Collections Framework(JCF)

JAVA에서 컬렉션이란 데이터의 집합, 그룹을 의미한다. 

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

 

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

여기서 Map은 Collection을 상속받지 않지만 Collection으로 분류된다. 

 

인터페이스 구현클래스 특징
Set HashSet
TreeSet
순서를 유지하지 않는 데이터의 집합으로 데이터 중복을 허용하지 않는다.
List LinkedList
Vector
ArrayList
순서가 있는 데이터의 집합으로 데이터의 중복이 허용된다.
Queue LinkedList
PriorityQueue
List와 유사하나 FIFO 방식을 사용한다.
Map Hashtable
HashMap
TreeMap
키(Key), 값(Value)의 쌍으로 이루어진 데이터의 집합으로, 순서는 유지되지 않으며 키(Key)의 중복을 허용하지 않는다.

 

자료구조 유형으로 정리하면 

  • List : 목록처럼 데이터를 순서에 따라 관리한다.
  • Set : 중복이 허용되지 않는 데이터를 관리한다.
  • Map : 데이터를 Key, Value로 짝을 이루어 관리한다.
  • Queue : 데이터를 FIFO(First In First Out)방식으로 관리
  • Stack : 데이터를 LIFO(Last In First Out 방식으로 관리

 

📝컬렉션의 특징

자바의 컬렉션들은 제네릭을 사용하여 구현한다. 

public interface List<E> extends Collection<E> {   ...   }

List, Set, Queue는 공통부모로 Collection 인터페이스를 상속받고 있으며, Collection 인터페이스의 주요 메소드를 사용할 수 있다.

Collection 인터페이스 메소드
리턴 타입 메소드 용도
boolean add(E e) 현재 컬렉션에 데이터 객체 e를 추가
boolean addAll(Collection<? extends E> c) 현재 컬렉션에 컬렉션 c의 모든 데이터를 추가
boolean contains(Object o) 현재 컬렉션에 객체 o를 포함 여부 반환
boolean remove(Object o) 현재 컬렉션에서 객체 o를 삭제
boolean removeAll(Collection <?> c) 현재 컬렉션에서 c와 일치하는 데이터를 모두 삭제한다.
boolean retainAll(Collection <?> c) 현재 컬렉션에서 컬렉션 c와 일치하는
데이터만 남기고 모두 삭제
void clear() 모든 데이터 삭제
int size() 데이터 개수 반환
boolean isEmpty() 비어있는지 반환
Object[] toArray() 저장된 데이터를 Object 배열로 반환
     

 

각 인터페이스의 특징

 

1. Set 인터페이스

  • 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않음
    • HashSet (순서가 중요하지 않는 경우 사용)
      • 가장 빠른 임의 접근 속도
      • 순서 예측이 불가능
    • TreeSet (정렬된 순서로 데이터에 접근해야할 때 사용)
      • 정렬방법 지정 가능 

2. List 인터페이스

  • 순서가 있는 데이터의 집합으로 데이터의 중복이 허용된다. 
    • ArrayList (대부분의 상황에서 사용)
      • 내부적으로 배열을 사용하여 구현
      • 데이터의 빠른 검색이 가능, 데이터 추가/삭제에 효율적이다.
    • LinkedList ( 삽입/ 삭제가 빈번한 상황에서 사용)
      • 이중 연결 리스트로 구현
      • 데이터의 중간에서의 삽입/삭제가 빠름 
    • Vector (동기화가 되어 있어 멀티스레드 환경에서 안전하게 사용가능)
      • 동기화 기능 

3. Queue 인터페이스 

  • PriorityQueue 
    • 우선순위 큐를 구현한 클래스
    • 우선순위에 따라 요소에 접근 가능

 

📝Map 인터페이스

Map은 컬렉션으로 취급되지만 컬렉션 인터페이스의 상속을 받지 않아 다른 방식으로 접근해야한다.

Map 메소드
리턴 타입 메소드 용도
void put(Key, Value) 메서드를 사용하여 특정 키에 값을 추가
Object get(Key) 키에 해당하는 값을 얻는다.
Object getOrDefault(Key,defaultValue) 해당 키가 존재하지 않을 경우 기본값을 반환(null을 검사하지 않고 사용가능)
boolean containsKey(Key) 키가 존재하는지 반환
boolean containsValue(value) 특정 값이 존재하는지 반환
Object KeySet() 해당 맵에 모든 키 값을 반환한다.
순회에서 사용
Object values() 해당 맵에 모든 값을 반환한다.
순회에서 사용 

 

Map의 특징
  • HashMap ( 순서가 중요하지 않는 키-값 구조에서 사용)
    • 키-값 쌍을 저장하고 검색에 빠르다.
    • 순서가 중요하지 않은 키- 값 쌍을 저장할 때 사용
  • LinkedHashMap (삽입 ,액세스 순서가 중요할 때 사용)
    • 해시 테이블과 연결 리스트를 사용하여 삽입 순서나 액세스 순서대로 키-값 쌍을 유지
    • 일반적으론 사용하지 않는다. 
  • TreeMap (정렬된 순서로 접근해야 할 때 사용)
    • 이진 검색 트리를 사용하여 키-값 쌍을 정렬된 상태로 유지
    • 정렬된 순서로 키-값 쌍에 접근해야 할 때 사용한다.

 

 


✔참조 사이트