본문 바로가기

Backend/Data Structure

3. Collection Framework

Java Collection Framework

자바에서 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미. java.util 패키지에 포함된 인터페이스들(List, Set, Map, Queue, Stack 등)을 구현한 클래스들이 컬렉션 프레임워크로 사용된다.

 

배열은 저장할 크기가 배열을 생성할 때 결정되어 배열의 크기가 넘어가면 저장이 불가능하다. 또한 데이터를 삭제하면 해당 인덱스의 데이터는 비어있는 구조메모리를 효율적으로 관리할 수 없다는 문제점이 발생된다. 이러한 배열이 갖는 문제점들을 컬렉션 프레임워크를 통해서 해결이 가능하다. 컬렉션 프레임워크들은 동적으로 데이터를 저장하는 크기(용량)가 자동적으로 늘어나고, 중간의 데이터를 삭제하면 인덱스가 하나씩 앞으로 당겨진다.

 

 

 

주요 인터페이스

 List와 Set 인터페이스는 모두 Collection 인터페이스를 상속받지만, 구조상의 차이로 인해 Map 인터페이스는 별도로 정의된다.

 

위의 그림에서 <E>나 <K, V>라는 것은 컬렉션 프레임워크를 구성하는 모든 클래스가 제네릭으로 표현되어 있음을 알려준다.

 

  • List:
    객체를 인덱스로 관리하는 방식. 객체를 저장하면 자동으로 인덱스가 부여되며 해당 인덱스로 객체를 검색, 삭제 할 수 있다.
    객체 자체를 저장하는 것이 아닌, 해당하는 인덱스에 객체 주소를 참조하여 저장한다.
    데이터의 중복저장이 가능하다.
  • Set: 
    객체를 인덱스로 관리하지 않아 객체 간 순서가 지정되어 있지 않다.
    데이터의 중복저장이 불가능하다.
  • Map:
    키(Key) 객체와 값(Value) 객체의 한 쌍으로 이루어진 데이터의 집합으로 순서가 지정되어 있지 않다.
    Key는 중복이 불가능하지만 Value는 중복이 가능하다. 만약 기존에 저장된 키와 동일한 키를 설정할 시 기존의 Key 데이터는 없어지고 새로운 데이터가 덮어쓰기 된다.

 

 

주요 인터페이스 특징

 

구분 특징 구현 클래스
Collection List<E> 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용함. Vector, ArrayList, LinkedList, Stack, Queue
Set<E> 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않음. HashSet, TreeSet
Map<K, V>

키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없음.

이때 키는 중복을 허용하지 않지만, 값은 중복될 수 있음.

HashMap, TreeMap, Hashtable, Properties

 

 

Collection 인터페이스의 Method (메소드)

List와 Set의 조상인 Collection 인터페이스에서 제공하는 주요 메서드

 

 메소드

설명 

 boolean add(Object o)

 boolean addAll(Collection c)

해당 컬렉션에 전달된 요소를 추가함 

 void clear()

해당 컬렉션의 모든 요소를 제거함 

boolean contains(Object o)

boolean containsAll(Collection c) 

지정된 객체(o) 또는 컬렉션의 객체들이 컬렉션에 포함되어 있는지 확인함

boolean equals(Object o) 

동일한 컬렉션인지 비교함

boolean isEmpty() 

컬렉션이 비어있는지 확인함 

Iterator<E> iterator() 

해당 컬렉션의 반복자(iterator)를 반환함

boolean remove(Object o) 

 지정된 객체를 삭제함 

int size() 

해당 컬렉션의 요소의 총 개수를 반환함

Object[] toArray()

해당 컬렉션의 모든 요소를 Object 타입의 배열로 반환함

 

 

 

컬렉션 클래스(collection class)

 

List 인터페이스

List 인터페이스는 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는데 사용된다. 대표적인 List 컬렉션 클래스에 속하는 클래스는 다음과 같다.

  • ArrayList<E>
  • LinkedList<E>
  • Vector<E>
  • Stack<E>

Set 인터페이스

Set 인터페이스를 구현한 Set 컬렉션 클래스는 요소의 저장 순서를 유지하지 않고, 같은 요소의 중복저장을 허용하지 않는다. 대표적인 Set 컬렉션 클래스에 속하는 클래스는 다음과 같다.

  • HashSet<E>
  • TreeSet<E>

 

 

각 컬렉션 클래스(collection class)의 특징

각 컬렉션 클래스마다 장,단점이 있으므로 구현원리와 특징을 잘 이해해야 효율적으로 데이터를 관리하고 사용할 수 있다. 

 

 

 

 컬렉션

특징 

ArrayList 

배열 기반, 데이터의 추가와 삭제에 불리, 순차적인 추가삭제는 제일 빠름. 

임의의 요소에 대한 접근성이 뛰어남. 

LinkedList 

연결기반, 데이터의 추가와 삭제에 유리, 임의이 요소에 대한 접근성이 좋지 않다.

HashMap 

배열과 연결이 결합된 형태, 추가, 삭제, 검색, 접근성이 모두 뛰어남. 검색에는 최고.

TreeMap

 연결기반, 정렬과 검색(특히 범위검색)에 적합. 검색 성능은 HashMap보다 떨어짐

Stack 

Vector를 상속받아 구현 

Queue 

LinkedList가 Queue인터페이스를 구현

Properties 

Hashtable을 상속받아 구현 

HashSet 

HashMap을 이용해서 구현 

TreeSet 

TreeMap을 이용해서 구현 

LinkedHashMap
LinkedHashSet 

HashMap과 HashSet에 저장순서유지기능을 추가하였음. 

 

 

 

 

 


참고:

 

blog.naver.com/PostView.nhn?blogId=heartflow89&logNo=220989831899&parentCategoryNo=&categoryNo=28&viewDate=&isShowPopularPosts=false&from=postView

steady-snail.tistory.com/74

www.tcpschool.com/java/java_collectionFramework_concept

postitforhooney.tistory.com/entry/JavaCollection-Java-Collection-Framework%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4%EB%A5%BC-%ED%86%B5%ED%95%B4-Data-Structure-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

'Backend > Data Structure' 카테고리의 다른 글

2. Array 클래스  (0) 2020.11.19
1. Stack 클래스  (0) 2020.11.14