Java

Java Collection Framework

Tommy__Kim 2023. 4. 25. 15:23

Java에서 Collection Framework라는 용어를 들어본 적이 있을 것입니다. 

많이는 들어봤지만 정리는 잘 안하게 되는 Collection Framework에 대해서 정리를 해보려고 합니다. 

Collection : 다수군의 데이터를 의미합니다. 

Framework : 표준화된 프로그래밍 방식을 의미합니다. 

Collection Framework 는 즉 데이터군을 저장하는 클래스들을 표준화한 설계도 라고 보시면 될 것 같습니다.

 

Collection Framework는 JDK1.2 에 등장하였습니다. 

JDK 1.2 이전에는 컬렉션 클래스, 다수의 데이터를 저장할 수 있는 클래스들을 서로 다른 방식으로 처리했습니다.

Collection Framework 의 등장으로 인해 다양한 종류의 컬렉션 클래스가 추가 되었고 모든 컬렉션 클래스들을 표준화된 방식으로 다룰 수 있도록 체계화가 되었습니다. 

 

인터페이스 간 상속 계층도는 다음과 같습니다. 

List와 Set의 경우 공통점이 많기 때문에 Collection으로 따로 추출을 했습니다.

Map의 경우 List와 Set과는 다른 형태로 컬렉션을 다루기 때문에 같은 상속 계층도에 포함되지 못했습니다. 

 

List, Set, Map의 특성과 구현 클래스들은 다음과 같습니다. 

List 순서가 있는 데이터의 집합, 데이터의 중복을 허용 
구현 클래스 : ArrayList, Linked List, Stack, Vector ... 
Set 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용 안함
구현 클래스 : HashSet, TreeSet ... 
Map key-value 쌍의 데이터 집합.
순서는 유지되지않으며 키는 중복을 허용하지 않고, 값은 중복을 허용
구현 클래스 : HashMap, TreeMap, HashTable ... 
Collection Framework의 모든 컬렉션 클래스들은 List, Set, Map 중 하나를 구현하고 있으며, 구현한 인터페이스의 이름이 클래스 이름에 포함되어 있어 이름만으로도 컬렉션의 특징을 알 수 있도록 설계되어 있습니다. 
하지만 이를 위배하는 클래스들이 있습니다. (ex, Vector, Stack ...)
이러한 클래스들은 Collection Framework 이 생성되기 전부터 존재하던 것들이라 Collection Framework의 명명법을 따르지 않고 있습니다. (기존의 컬렉션들은 하위 호환을 위해 남겨두었다고 합니다.)

List 인터페이스 상속 계층도 

List 구현 클래스 

ArrayList

ArrayList는 List 인터페이스를 구현하기 때문에 데이터의 저장 순서가 유지되고 중복을 허용합니다. 

ArrayList는 Object 배열을 사용해 데이터를 순차적으로 저장합니다.

배열에 저장할 공간이 없다면 보다 큰 배열을 생성해 복사합니다. 

 

ArrayList가 제공하는 기능들을 확인해보고 싶으신 분들은 다음 링크에 들어가서 확인 해 보시면 될 것 같습니다. 

ArrayList 바로가기

 

ArrayList (Java Platform SE 8 )

Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipulate the size of the array that is

docs.oracle.com

ArrayList가 가지는 장점은 다음과 같습니다. 

1. 구조가 간단하여 사용하기 쉽다. 

2. 데이터의 접근 시간이 빠르다. 

 

ArrayList가 가지는 단점은 다음과 같습니다. 

1. 크기를 변경할 수 없다. (만약 지정한 배열의 크기를 넘어갈 경우 새로운 배열을 생성해 복사해야한다.)

2. 비순차적인 데이터의 추가 및 삭제에 시간이 오래 걸린다. 

( Array 중간에 있는 요소의 추가를 하려면 새로운 배열에 옮겨서 저장을 해야한다. 

 

LinkedList 

ArrayList가 가지는 단점을 보완하기 위해 나온 자료구조가 LinkedList 입니다. 

LinkedList는 ArrayList와 달리 모든 요소가 Node라는 구조로 불연속적으로 저장됩니다. 

하지만 Node에는 다음 Node의 Address 값이 있어 논리적인 연속성을 가집니다. 

 

LinkedList는 다음과 같이 구성되어 있습니다. 

LinkedList의 경우 다음 Node의 주소만 알기 때문에 이전 Node를 알지 못합니다.

이러한 불편함을 해소하고자 Doubly-LinkedList가 나왔습니다. 

 

Doubly-LinkedList는 다음과 같이 구성되어 있습니다.

Doubly circular LinkedList의 경우 Doubly-LinkedList에 맨 끝 노드와 맨 처음 노드를 이어준 자료구조를 말합니다. 

 

Doubly circular LinkedList는 다음과 같이 구성되어 있습니다.

LinkedList가 제공하는 기본 기능들은 다음에서 확인해 보실 수 있습니다.

LinkedList 바로가기

 

LinkedList (Java Platform SE 7 )

Returns a list-iterator of the elements in this list (in proper sequence), starting at the specified position in the list. Obeys the general contract of List.listIterator(int). The list-iterator is fail-fast: if the list is structurally modified at any tim

docs.oracle.com

Set 인터페이스 상속 계층도

Set 구현 클래스

 HashSet

Set 인터페이스를 구현한 가장 대표적인 컬렉션입니다. HashSet은 중복을 허용하지 않습니다.

HashSet에 새로운 요소를 추가할 때에는 add 혹은 addAll 메서드를 사용하는데, 이미 Set에 해당 요소가 저장되어 있다면 이 메서드들은 false를 반환하며 요소 추가에 실패합니다.  이러한 특징을 사용해 컬렉션 내의 중복 요소를 손 쉽게 제거를 할 수 있습니다.

HashSet의 경우 저장 순서를 따로 고려하지 않습니다. 

만약 중복 요소를 제거함과 동시에 저장 순서가 중요하다면 LinkedHashSet을 사용하면 됩니다. 

HashSet이 제공하는 기능들은 다음 링크에서 확인해 보실 수 있습니다.

HashSet 바로가기

 

HashSet (Java Platform SE 7 )

This class implements the Set interface, backed by a hash table (actually a HashMap instance). It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time. This class permi

docs.oracle.com

TreeSet

TreeSet은 Binary Search Tree(이진 검색 트리)의 자료구조 형태로 데이터를 저장하는 컬렉션 입니다.

이진 검색 트리는 정렬, 검색, 범위 검색에 높은 성능을 보이는 자료구조입니다.

위에 보시는 것처럼 이진 검색 트리는 각 부모 노드마다 최대 2개의 Child 노드를 가지는 구조를 말합니다.

TreeSet 역시 Set을 구현한 컬렉션으로 중복된 데이터 저장을 허용하지 않으며 정렬된 위치에 저장하므로 저장순서를 유지하지 않습니다. 

TreeSet이 제공하는 기능은 다음 링크에서 확인해 보실 수 있습니다.

TreeSet 바로가기

 

TreeSet (Java Platform SE 7 )

A NavigableSet implementation based on a TreeMap. The elements are ordered using their natural ordering, or by a Comparator provided at set creation time, depending on which constructor is used. This implementation provides guaranteed log(n) time cost for

docs.oracle.com

Map 인터페이스 상속 계층도

Map 구현 클래스

HashMap

HashMap은 Map을 구현한 컬렉션으로 key, value를 묶어 데이터를 저장한다는 특징을 가집니다.

key는 중복이 허용되지 않으며, value의 경우 중복을 허용합니다.

또한 hashing을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어 뛰어난 성능을 나타냅니다.

HashMap 에서 제공하는 기능은 다음 링크에서 확인해 보실 수 있습니다.

HashMap 바로가기

 

HashMap (Java Platform SE 8 )

If the specified key is not already associated with a value (or is mapped to null), attempts to compute its value using the given mapping function and enters it into this map unless null. If the function returns null no mapping is recorded. If the function

docs.oracle.com

 

TreeMap

TreeMap은 이진검색 형태로 key, value를 묶어 데이터를 저장하는 특징을 지닙니다. 

검색의 경우 HashMap이 TreeMap 보다 성능이 뛰어나지만 범위 검색 혹은 정렬에는 TreeMap의 성능이 더

뛰어나다고 알려져 있습니다.

 

TreeMap에서 제공하는 기능은 다음 링크에서 확인해 보실 수 있습니다.

TreeMap 바로가기

 

TreeMap (Java Platform SE 8 )

A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used. This implementation provides guaranteed log(n) ti

docs.oracle.com

 

 

'Java' 카테고리의 다른 글

오버로딩과 오버라이딩에 대해  (0) 2023.05.01
Java Parameter Passing Mechanism  (0) 2023.04.26
String, StringBuffer, StringBuilder  (0) 2023.04.24
Junit - Parameterized Test (변수 테스트)  (0) 2023.04.22
Javadoc 이란?  (0) 2023.04.22