[Java] What, How - Collection, List, Set, Map

하쮸·2025년 9월 22일

Error, Why, What, How

목록 보기
33/62

1. 컬렉션 프레임워크.

  • 자바 컬렉션 프레임워크(Java Collections Framework)란?
    • 데이터 군(群)을 저장하는 클래스들을 표준화한 설계.
  • 컬렉션 프레임워크의 모든 컬렉션 클래스들은 List, Set, Map 중 하나를 구현하고 있음.
    • 구현한 인터페이스의 이름이 클래스의 이름에 포함되어 있기 때문에 클래스의 이름만으로도 특징을 쉽게 파악할 수 있음.
    • 단, Vector, Stack, Hashtable, Properties와 같은 클래스들은 컬렉션 프레임쿼크 이전부터 존재했던 것들이라 명명법이 다름.
      • 이전부터 존재하던 Vector, Hashtable을 사용하기보단 새로 만들어진 ArrayList, HashMap을 사용하는 것이 좋음.

  • 인터페이스 List, Set을 구현한 컬렉션 클래스들은 서로 공통된 부분이 많기 때문에
    따로 공통된 부분을 빼서 인터페이스 Collection을 정의해놨음.
  • 인터페이스 Map의 경우 전혀 다른 형태로 컬렉션을 다루기 때문에 같은 상속계층도에 포함되지 않음.

2. Collection

JDK 17 - Collection

  • List와 Set의 부모인 Collection 인터페이스.
    • 데이터 추가, 삭제, 읽기 등 기본적인 메서드들이 정의되어 있음.

JDK 17 - Collection 메서드

메서드반환 타입설명
add(E e)boolean- 지정된 요소를 컬렉션에 추가.
addAll(Collection<? extends E> c)boolean- 지정된 컬렉션의 모든 요소를 이 컬렉션에 추가.
clear()void- 이 컬렉션에서 모든 요소를 제거.
contains(Object o)boolean- 이 컬렉션이 지정된 요소를 포함하고 있으면 true를 반환.
containsAll(Collection<?> c)boolean- 이 컬렉션이 지정된 컬렉션의 모든 요소를 포함하고 있으면 true를 반환.
equals(Object o)boolean- 지정된 객체와 이 컬렉션이 동일한지 비교.
hashCode()int- 이 컬렉션의 해시 코드 값을 반환.
isEmpty()boolean- 이 컬렉션에 요소가 없으면 true를 반환.
iterator()Iterator<E>- 이 컬렉션의 요소들을 순회하는 이터레이터(iterator)를 반환.
parallelStream()Stream<E>- 이 컬렉션을 소스로 하는 병렬 스트림(parallel stream)을 반환.
remove(Object o)boolean- 지정된 요소를 이 컬렉션에서 한 개 제거.
removeAll(Collection<?> c)boolean- 지정된 컬렉션에 포함된 이 컬렉션의 모든 요소를 제거.
removeIf(Predicate<? super E> filter)boolean- 주어진 조건(predicate)을 만족하는 모든 요소를 이 컬렉션에서 제거.
retainAll(Collection<?> c)boolean- 지정된 컬렉션에 포함된 요소들만 남기고, 나머지 요소들을 모두 제거.
size()int- 이 컬렉션에 포함된 요소의 개수를 반환.
spliterator()Spliterator<E>- 이 컬렉션의 요소들을 순회하고 분할하는 스플리터레이터(Spliterator)를 생성.
stream()Stream<E>- 이 컬렉션을 소스로 하는 순차 스트림(sequential stream)을 반환.
toArray()Object[]- 이 컬렉션의 모든 요소를 포함하는 Object 타입의 배열을 반환.
toArray(IntFunction<T[]> generator)<T> T[]- 제공된 생성자 함수를 사용하여 이 컬렉션의 모든 요소를 포함하는 배열을 반환.
toArray(T[] a)<T> T[]- 이 컬렉션의 모든 요소를 지정된 배열에 담아 반환.

3. List

JDK 17 - List

  • List 인터페이스는 중복을 허용하고 저장순서가 유지되는 컬렉션을 구현하는데 사용함.

JDK 17 - List 메서드

메서드반환 타입설명
add(int index, E element)void- 지정된 위치에 특정 요소를 삽입.
add(E e)boolean- 리스트의 끝에 지정된 요소를 추가.
addAll(int index, Collection<? extends E> c) ㅤ ㅤ ㅤ ㅤ ㅤ ㅤ ㅤ ㅤ ㅤboolean- 지정된 위치에 지정된 컬렉션의 모든 요소를 삽입.
addAll(Collection<? extends E> c)boolean- 리스트의 끝에 지정된 컬렉션의 모든 요소를 추가.
get(int index)E- 지정된 위치에 있는 요소를 반환.
indexOf(Object o)int- 리스트에서 지정된 요소가 처음 나타나는 인덱스를 반환. 요소가 없으면 -1을 반환.
lastIndexOf(Object o)int- 리스트에서 지정된 요소가 마지막으로 나타나는 인덱스를 반환. 요소가 없으면 -1을 반환.
listIterator()ListIterator<E>ㅤㅤ ㅤ ㅤ ㅤ ㅤ- 리스트의 요소들을 순차적으로 순회하는 리스트 이터레이터를 반환.
remove(int index)E- 지정된 위치에 있는 요소를 제거하고, 제거된 요소를 반환.
remove(Object o)boolean- 리스트에서 지정된 요소의 첫 번째 인스턴스를 제거.
set(int index, E element)E- 지정된 위치에 있는 요소를 지정된 요소로 대체하고, 이전 요소를 반환.
sort(Comparator<? super E> c)void- 지정된 Comparator의 순서에 따라 이 리스트를 정렬.
subList(int fromIndex, int toIndex)List<E>- fromIndex(포함)부터 toIndex(미포함)까지의 객체를 반환.

4. Set

JDK 17 - Set

  • Set 인터페이스는 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용함.

JDK 17 - Set 메서드

메서드반환 타입설명
add(E e)boolean- 지정된 요소를 Set에 추가. 이미 존재하는 요소는 중복해서 추가되지 않음.
addAll(Collection<? extends E> c)boolean- 지정된 컬렉션의 모든 요소를 이 Set에 추가.
clear()void- 이 Set의 모든 요소를 제거.
contains(Object o)boolean- 이 Set이 지정된 요소를 포함하고 있으면 true를 반환.
isEmpty()boolean- 이 Set에 요소가 없으면 true를 반환.
remove(Object o)boolean- 지정된 요소를 이 Set에서 제거.
size()int- 이 Set에 포함된 요소의 개수를 반환.
iterator()Iterator<E>- 이 Set의 요소들을 순회하는 이터레이터(iterator)를 반환.
stream()Stream<E>- 이 Set을 소스로 하는 순차 스트림(sequential stream)을 반환.

5. Map

JDK 17 - Map

  • Map 인터페이스는 키(key)와 값(value)을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는데 사용함.
    • 키는 중복을 허용하지 않지만 값은 중복을 허용함.
      • 만약 중복된 키와 값을 저장하면 기존에 존재하던 값을 덮어쓰게 됨.
        즉, 기존 데이터는 없어지고 마지막으로 저장된 값이 남게됨.

JDK 17 - Map 메서드

메서드반환 타입설명
clear()void- 모든 객체를 제거.
containsKey(Object key)boolean- 지정된 key 객체와 일치하는 Map의 key객체가 있는지 확인
containsValue(Object value)boolean- 지정된 value 객체와 일치하는 Map의 value 객체가 있는지 확인.
entrySet()Set<Map.Entry<K,V>> ㅤ ㅤ- Map에 저장되어 있는 key-value쌍을 Map.Entry 타입의 객체로 저장한 Set으로 반환.
get(Object key)V- 지정한 key 객체에 대응하는 value객체를 찾아서 반환.
getOrDefault(Object key, V defaultValue)V- 지정한 키에 대응하는 값 또는 기본값 반환.
isEmpty()boolean- Map이 비어있는지 확인.
keySet()Set<K>- Map에 저장된 모든 key 객체를 반환함.
put(K key, V value)V- Map에 value 객체를 key 객체에 연결(mapping)하여 저장.
putAll(Map<? extends K,? extends V> m)void- 지정된 Map의 모든 key-value쌍을 추가.
putIfAbsent(K key, V value)V- key가 존재하지 않을 때만 value 연결
remove(Object key)V- key에 대한 매핑 제거.
remove(Object key, Object value)boolean- key와 value가 모두 일치할 때 매핑 제거.
replace(K key, V value)V- key에 매핑된 value 대체.
size()int- key-value 매핑의 수를 반환.
values()Collection<V>- Map에 저장된 모든 value 객체를 반환.
  • values()의 반환타입이 Collection이고 keySet()의 반환타입이 Set.
    • 왜냐하면 Map 인터페이스에서
      값(value)의 중복은 허용하기 때문에 Collection 타입으로 반환하고
      키(key)의 중복은 허용하지 않기 때문에 Set 타입으로 반환 하는거임.

5-1. Map.Entry

JDK 17 - Map.Entry

  • Map.Entry 인터페이스는 Map 인터페이스의 내부 인터페이스임.
    • 내부 클래스처럼 인터페이스 또한 인터페이스 안에 인터페이스를 정의하는 내부 인터페이스(inner interface)를 정의하는 것이 가능함.
메서드반환 타입설명
copyOf(Map.Entry<? extends K,? extends V> e)ㅤ ㅤMap.Entry<K,V>ㅤ ㅤ- 주어진 Map.Entry의 복사본을 반환.
equals(Object o)boolean- 지정된 객체와 이 엔트리(entry)의 동등성을 비교.
getKey()K- 이 엔트리에 해당하는 key 객체를 반환.
getValue()V- 이 엔트리에 해당하는 value 객체를 반환.
hashCode()int- 이 맵 엔트리의 해시 코드 값을 반환.
setValue(V value)V- 이 엔트리에 해당하는 객체를 지정된 객체로 교체.

6. 요약.

인터페이스특징
List- 순서가 있는 데이터 집합.
- 데이터의 중복을 허용함.
- 구현 클래스 : ArrayList, LinkedList, Stack, Vector 등.
Set- 순서를 유지하지 않는 데이터 집합.
- 데이터의 중복을 허용하지 않음.
구현 클래스 : HashSet, TreeSet 등.
Map- 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터 집합.
- 순서가 유지되지 않고 키는 중복을 허용하지 않지만 값은 중복을 허용함.
- 구현 클래스 : HashMap, TreeMap, HashTable, Properties 등.
profile
Every cloud has a silver lining.

0개의 댓글