Java :: Collection :: 1. 컬렉션 프레임웍

김병철·2022년 8월 31일
0

Java

목록 보기
1/20

Java의 정석 3판을 보며 공부한 내용을 정리하였습니다.
남궁성님께 많이 배우고 있습니다.

Chapter 11 컬렉션 프레임웍

1. 컬렉션 프레임웍이란?

컬렉션과 프레임웍(Collection Framework)은 각각 다음과 같은 뜻을 갖고 있다.

  • 컬렉션 : 다수의 데이터
  • 프레임웍 : 표준화된 프로그래밍 방식

# 두 가지를 종합했을 때 컬렉션 프레임웍은 다음과 같다.

데이터 군을 저장하는 클래스들을 표준화한 설계


# JDK1.2 이전

Vector, Hashtable, Properties와 같은 다수의 데이터를 저장할 수 있는 클래스들을 서로 다른 각자의 방식으로 처리

# JDK1.2 이후

컬렉션 프레임웍의 등장.
다양한 종류의 컬렉션 클래스 추가 + 모든 컬렉션 클래스의 표준화된 처리방식
(컬렉션 클래스 : Vector와 같이 다수의 데이터를 저장할 수 있는 클래스)

# 왜 컬렉션 프레임웍을 쓸까?

  • 다수의 데이터를 다루는 데 필요한 다양하고 풍부한 클래스를 제공
    -> 입맛에 따라 골라서 사용 가능
  • 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화
    -> 사용하기 쉬움

1.1 컬렉션 프레임웍의 핵심 인터페이스

컬렉션 데이터 그룹을 크게 세가지 타입이 존재한다.

  • List
  • Set
  • Map

그림 1. 컬렉션 프레임웍의 핵심 인터페이스간의 상속계층도

위 그림과 같이컬렉션을 다루는데 필요한 기능을 가진 3개의 인터페이스를 정의하고 ListSet의 공통된 부분을 다시 뽑아 새로운 인터페이스인 Collection을 추가로 정의

  • List : 순서 O, 데이터 중복 O
    -> 구현 클래스 : ArrayList, LinkedList, STack, Vector등
  • Set : 순서 X, 데이터 중복 X
    -> 구현 클래스 : HashSet, TreeSet 등
  • Map : 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터 집합
    -> 구현 클래스 : HashMap, TreeMap, Hashtable, Properties등
    (Key는 어떤 value를 찾는데 열쇠가 된다는 뜻)

# Vector, Stack, Hashtable, Properties

컬렉션 프레임웍 이전에 존재하던 것이라 컬렉션 프레임웍 명명법과 다르다.

VectorHashtable같은 기존의 컬렉션 클래스들은 호환을 위해 남겨두었지만, 가능하면 ArrayListHashMap을 사용!


Collection 인터페이스

# List 와 Set의 조상인 Collection 인터페이스의 메서드

  • boolean add(Object o)
  • boolean add(Collection c)
    ->지정된 객체(o) 또는 Collection(c)의 객체들을 Collection에 추가
  • void clear()
    -> Collection의 모든 객체를 삭제
  • boolean contains(Object o)
  • boolean containsAll(Collection c)
    -> 지정된 객체(o) 또는 Collection(c)의 객체들이 Collection에 포함되어 있는지 확인
  • boolean equals(Object o)
    -> 동일한 Collection인지 확인
  • int hashCode()
    -> Collection의 hash code를 반환
  • boolean isEmpty()
    -> Collection이 비어있는지 확인
  • Iterator iterator()
    -> Collection의 Iterator를 얻어서 반환
  • boolean remove(Object o)
    -> 지정된 객체 삭제
  • boolean removeAll(Collection c)
    -> 지정된 Collection에 포함된 객체들을 삭제
  • boolean retainAll(Collection c)
    -> 지정된 Collection에 포함된 객체만을 남기고 다른 객체들은 Collection에서 삭제
    이 작업으로 인해 Collection에 변화가 있으면 true, 아니면 false 반환
  • int size()
    -> Collection에 저장된 객체의 개수 반환
  • Object[] toArray()
    -> Collection에 저장된 객체를 객체배열(Object[])로 반환
  • Object[] toArray(Object[] a)
    -> 지정된 배열에 Collection의 객체를 저장해서 반환

JDK 1.8부터 추가된 parallelStream, removeIf, stream, forEach 등은 람다식를 먼저 배워야 한다!


List 인터페이스

순서 O, 중복 허용!!

그림 2. List의 상속계층도


List 인터페이스에 정의된 메서드

(Collection 인터페이스로부터 상속받은 것들 제외)

  • void add(int index, Object element)
  • boolean addAll(int index, Collection c)
    -> 지정된 위치(index)에 객체(element) 또는 컬렉션에 포함된 객체들을 추가
  • Object get(int index)
    -> 지정된 위치(index)에 있는 객체 반환
  • int indexOf(Object o)
    -> 지정된 객체의 위치(index) 반환(List의 첫 번째 요소부터 순방향으로 찾는다.)
  • int lastIndexOf(Object o)
    -> 지정된 객체의 위치(index) 반환(List의 마지막 요소부터 역방향으로 찾는다.)
  • ListIterator listIterator()
  • ListIterator listIterator(int index)
    -> List의 객체에 접근할 수 있는 ListIterator를 반환
  • Object remove(int index)
    -> 지정된 위치(index)에 있는 객체를 삭제하고 삭제된 객체 반환
  • Object set(int index, Object element)
    -> 지정된 위치(index)에 객체(element)를 저장
  • void sort(Comparator c)
    -> 지정된 비교자(comparator)로 List를 정렬
  • List subList(int fromIndex, int toIndex)
    -> 지정된 범위(fromIndex~toIndex)에 있는 객체 반환

Set 인터페이스

순서 X, 중복 금지!!

그림 3. Set의 상속계층도


Map 인터페이스

key 와 value를 하나의 쌍으로 묶어서 저장
(key는 중복 X, value는 중복 O)

그림 4. Map의 상속계층도


Map 인터페이스의 메서드

  • void clear()
    -> Map의 모든 객체를 삭제
  • boolean containsKey(Object Key)
    -> 지정된 key객체와 일치하는 MAp의 key객체가 있는지 확인
  • boolean containsValue(Object value)
    -> 지정된 value객체와 일치하는 Map의 value객체가 있는지 확인
  • Set entrySet()
    -> Map에 저장되어 있는 key-value쌍을 Map.Entry타입의 객체로 저장한 Set으로 반환
  • boolean equals(Object o)
    -> 동일한 Map인지 비교
  • Object get(Object key)
    -> 지정한 key객체에 대응하는 value객체를 찾아서 반환
  • int hashCode()
    -> 해시코드 반환
  • boolean isEmpty()
    -> Map이 비어있는지 확인
  • Set keySet()
    -> Map에 저장된 모든 key객체 반환
  • Object put(Object key, Object value)
    -> Map에 value객체를 key객체에 연결(mappint)하여 저장
  • void putAll(Map t)
    -> 지정된 Map의 모든 key-value쌍을 추가
  • Object remove(Object key)
    -> 지정한 key객체와 일치하는 key-value객체 삭제
  • int size()
    -> Map에 저장된 key-value쌍의 개수 반환
  • Collection values()
    -> Map에 저장된 모든 value객체 반환

기존에 저장된 데이터와 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값이 남는다.

  • Set keySet() -> 반환 타입이 Set
  • values() -> 반환 타입이 Collection
    -> Map인터페이스에서 value는 중복을 허용해서 Collection타입으로 반환하고
    key는 중복을 허용하지 않으므로 Set타입으로 반환한다.

Map.Entry 인터페이스

(Map인터페이스의 내부 인터페이스)

  public interface Map{
  	...
  	public static interface Entry{
  		Object getKey();
  		Object getValue();
  		Object setValue(Object value);
  		boolean equals(Object o);
  		int hashCode();
  		...		// JDK8.0부터 추가된 메서드 생략
  	}
  }

Map.Entry 인터페이스의 메서드

  • boolean equals(Object o)
    -> 동일한 Entry인지 비교
  • Object getKey()
    -> Entry의 key객체 반환
  • Object getValue()
    -> Entry의 value객체 반환
  • int hashCode()
    -> Entry의 해시코드 반환
  • Object setValue(Object value)
    -> Entry의 value객체를 지정된 객체로 변경
profile
keep going on~

0개의 댓글