32. Collections Framework

Isaiah IM·2023년 10월 17일
0

java basic

목록 보기
34/38
post-thumbnail

1. Collections Framework란?

1.1 Collections Framework의 정의

컬렉션 프레임워크(Collections Framework)란 여러 그룹의 데이터를 저장하는 프레임워크(프로그래밍 방식)이다.

개발을 하다 보면 여러 그룹의 데이터를 다뤄야 할 일이 생긴다. 예를 들어 입출력이 빈번하게 발생해서 데이터의 입출력이 쉬운 그룹, 데이터의 검색을 자주 해야 하는 그룹 등 여러 데이터의 그룹들이 있다. 이를 쉽게 다루기 위해 List, Stack, Queue, Tree등의 자료구조들을 자주 활용하곤 하는데, 이때, 이러한 자료구조들을 다루는 것이 바로 컬렉션 프레임워크 이다.

1.2 Collections Framework 인터페이스 종류

컬렉선 프레임워크에서는 크게 List, Set, Map 종류의 인터페이스가 있다.

List

List는 배열과 같이 순서가 있는 데이터의 집합으로, 배열보다 비교적 데이터의 수정/삭제가 쉽고, 데이터의 중복을 허용한다.

우리가 예전에 배열에 대해 다룬적이 있을 것이다. List자료형은 배열의 개선 버전(?)으로, 배열과 같이 순서가 있는 자료형이다. 즉, 아래와 같이 배열처럼 순서가 있고, 순서대로 데이터가 저장되는 자료구조이다.

이때, 배열과 List의 가장 큰 차이는 배열과 다르게 크기의 제한이 없다.
위의 그림을 보면 알 수 있지만 리스트는 하나의 데이터 를 다른 데이터와 체인처럼 연결한 구조로, 각 데이터를 노드(node)라고 하며 각 노드 안에는 저장할 데이터와 각 데이터들을 연결하는 부분으로 구성된다.
데이터를 추가할때는 노드를 생성해서 기존의 노드에 연결하면 되기 때문에 메모리가 무한하다는 가정하에서는 리스트의 길이는 무한하다.
데이터를 삭제할때는 아래 그림과 같이 해당 노드들의 연결을 끊고 다시 이으면 되기 때문에 배열보다 데이터의 추가/삭제가 쉽다.

단, 배열처럼 인덱스가 없기 때문에 list_x[0]과 같이 인덱스로 데이터를 접근하지 못하고, 검색을 하면서 데이터에 접근한다.

자바에서는 이러한 리스트 자료구조를 기반으로 ArrayList, Stack, Vector, LinkedList등이 구현되 있다.

Set


햄버거 세트의 그 세트가 아니다.

Set은 집합으로, 데이터의 중복을 허용하지 않고, 데이터의 저장 순서가 없다.

Set자료구조는 집합 자료구조로, 한 집합에서 데이터의 중복을 허용하지 않는것 처럼 하나의 Set에서 데이터의 중복을 허용하지 않는다. 또한, 교집합, 차집합, 합집합과 같은 집합 연산을 사용할 수 있으며, 데이터를 입력한 순서대로 저장되는 방식이 아닌 임의의 순서로 저장이 되는 방식이다.
즉, 데이터 1, 2, 3, 4, 5 순서로 저장을 해도 출력을 하면 1, 4, 2, 3, 5와 같이 저장 순서대로 출력이 되지 않는다.

자바에서는 이러한 set 자료구조를 기반으로 HashSet, TreeSet등이 구현되 있다.

Map

Map은 key-value 자료구조로, 배열로 치면 index에 해당하는 고유한 key와 데이터인 value로 이루어져 있는 자료구조이다.

Map은 key-value 자료구조로, 아래 그림과 같이 keyvalue로 이루어져 있는 자료구조이다.

Map에서 key의 중복은 허용되지 않으나, value의 경우 중복이 허용된다. 또한, set 자료구조와 마찬기자로 순서가 없으며, 일반적으로 검색을 하는 목적으로 많이 사용된다.

자바에서 map 자료구조는 HashMap, TreeMap, HashTable등이 있다.


2. Collections Framework 인터페이스

2.1 Collectoin 인터페이스

List 자료구조와 Set 자료구조의 조상인 Collection인터페이스에는 다음과 같은 메소드 들이 있다.

  • boolean add(Object o)
    객체를 Collection에 추가한다.

  • boolean addAll(Collection c)
    Collection c에 있는 모든 객체를 추가한다.

  • void clear()
    Collection에 있는 모든 객체를 삭★제 한다.

    전땅크처럼 밀면 된다.

  • boolean contains(Object o)
    해당 객체 o가 Collection에 포함되는지 확인한다.

  • boolean containsAll(Collection c)
    Collection c가 해당 Collection에 포함되는지 확인한다.(집합에서 포함관계와 같은 역할)

  • boolean equals(Object o)
    동일한 Collection인지 비교한다.
    예를들어 List 자료구조에서 두 리스트가 동일한 리스트(동일한 데이터, 동일한 순서)일 경우 같은 Collection이므로 true를 반환한다.

  • boolean hashCode()
    Collection의 hash code를 반환한다.

  • boolean isEmpty()
    Collection이 비어있는지 확인한다.

  • Iterator iterator()
    Collection의 iterator를 반환한다.

  • boolean remove(Object o)
    지정된 객체를 삭제한다. 만약 삭제가 됬으면 true를 반환한다.

  • boolean removeAll(Collection c)
    Collection c에 포함된 모든 객체를 삭제한다.

  • boolean retainAll(Collection c)
    지정된 Collection c에 포함된 객체를 제외하고 모두 삭제한다. 만약 이를 통해 Collection에 변화가 생기면(삭제된 객체가 있으면) true를 반환한다.

  • int size()
    Collection의 객체의 갯수를 반환한다.

  • Object[] toArray()
    해당 객체를 객체배열로 변환한다.
    예를들어 List자료구조에서 문자열 list의 경우 문자열 배열로 변환시킨다.

2.2 List 인터페이스

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

List 인터페이스 역시 Collection 인터페이스를 상속받았기 때문에 Collection 인터페이스의 모든 메소드를 사용할 수 있다. 또한, Collection 인터페이스에서 오버로딩된 인터페이스들 역시 있다.

다음은 Collection 인터페이스에서 오버로딩/오버라이딩 해서 List 인터페이스에 알맞게 사용할 수 있는 메소드와 List 인터페이스만의 고유한 메소드이다.

  • void add(int index, Object element)
    지정된 위치(index)에 객체(element)를 추가한다.

  • void add(int index, Collection c)
    지정된 위치(index)에 컬렉션 c를 추가한다.

  • Object get(int index)
    지정된 위치에 있는 객체를 반환한다.

  • int intexOf(Object o)
    지정된 객체의 인덱스 위치를 반환한다.(List의 첫번째 부터 순차적으로 검색)

  • int lastIndexOf(Object o)
    지정된 객체의 인덱스 위치를 반환한다.(List의 마지막 부터 역방향으로 순차적으로 검색)

  • ListIterator listIterator()
    list의 객체에 접근할 수 있는 ListIterator를 반환한다.

  • ListIterator listIterator(int index)
    list의 객체에 접근할 수 있는 ListIterator를 반환한다.

  • Object remove(int index)
    지정된 위치의 객체를 삭제하고 삭제된 객체를 반환한다.

  • Object set(int index, Object element)
    지정된 위치에 객체를 저장한다.

  • void sort(Comparator c)
    지정된 비교자c를 이용해 리스트를 정렬한다.

  • List subList(int fromIndex, int toIndex)
    fromIndex 부터 toIndex에 있는 객체를 새로운 List로 만들어서 반환한다.

2.3 Map 인터페이스

Map 인터페이스는 고유값인 key와 데이터인 value로 구성된 자료구조이다.

Map 인터페이스 역시 Collection 인터페이스를 상속받았기 때문에 Collection 인터페이스의 모든 메소드를 사용할 수 있다. 또한, Collection 인터페이스에서 오버로딩된 인터페이스들 역시 있다.

  • void clear()
    map의 모든 객체를 삭제한다.

    아무 일도 없었습니다.

  • boolean containsKey(Object key)
    해당 map에 일치하는 key가 있는지 확인한다.

  • boolean containsValue(Object value)
    해당 map에 일치하는 value가 있는지 확인한다.

  • Set entrySet()
    map에 저장된 key-value쌍을 map.entry타입의 Set로 반환한다.

  • boolean equals(Object o)
    두 map이 동일한지 확인한다.

  • Object get(Object key)
    지정한 key에 대응하는 value를 반환한다.

  • int hashCode()
    map의 해시코드를 반환한다.

  • boolean isEmpty()
    map이 비어있는지 확인한다.

  • Set keySet()
    map에 저장된 모든 key를 반환한다.

  • object put(Object key, Object value)
    map에 key-value쌍을 저장한다.

  • void putAll(Map t)
    map t에 있는 모든 key-value쌍을 저장한다.

  • Object remove(Object key)
    key에 해당되는 key-value쌍을 삭제한다.

    수령동지..?

  • int size()
    저장된 key-value쌍의 갯수를 반환한다.

  • Collection values()
    map에 저장된 모든 value를 반환한다.

profile
나는 생각한다. 고로 나는 코딩한다.

0개의 댓글