프로그래밍/JAVA

[JAVA] 컬렉션 프레임워크(collection framework)

리신 2023. 1. 4. 23:54
반응형

컬렉션 프레임 워크란?

다수의 데이터들을 저장하는 클래스들을 표준화한 설계를 뜻한다.

즉, 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 방법들을 제공하는 클래스들의 집합을 의미한다.


컬렉션 프레임워크의 핵심 인터페이스

-  List 인터페이스

-  Set 인터페이스

-  Map 인터페이스

 

이 중에서 List와 Set 인터페이스는 모두 Collection 인터페이스를 상속받지만,

구조상의 차이로 인해 Map 인터페이스는 별도로 정의됨.

인터페이스 설명 구현 클래스
List<E> 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용함. Vector, ArrayList, LinkedList, Stack, Queue
Set<E> 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않음. HashSet, TreeSet
Map<K, V> 키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없음.
이때 키는 중복을 허용하지 않지만, 값은 중복될 수 있음.
HashMap, TreeMap, Hashtable, Properties

 

컬렉션 프레임워크의 모든 컬렉션 클래스들은 List, Set, Map 중의 하나를 구현하고 있으며, 구현한 인터페이스의 이름이 클래스의 이름에 포함되어있어서 이름만으로도 클래스의 특징을 알 수 있습니다.

 

Vector나 Hashtable과 같은 컬렉션 클래스는 예전부터 사용해 왔으므로, 기존 코드와의 호환을 위해 아직도 남아 있습니다.

하지만 기존에 사용하던 컬렉션 클래스를 사용하는 것보다는 새로 추가된 ArrayList나 HashMap 클래스를 사용하는 것이 성능 면에서도 더 나은 결과를 얻을 수 있습니다.

 

 


Collection 인터페이스

List와 Set 인터페이스의 많은 공통된 부분을 Collection 인터페이스에서 정의하고, 두 인터페이스는 그것을 상속받습니다.

따라서 Collection 인터페이스는 컬렉션을 다루는데 가장 기본적인 동작들을 정의하고, 그것을 메소드로 제공하고 있습니다.

 

Collection 인터페이스에서 제공하는 주요 메소드

메소드 설명
boolean add(E e) 해당 컬렉션(collection)에 전달된 요소를 추가함. (선택적 기능)
void clear() 해당 컬렉션의 모든 요소를 제거함. (선택적 기능)
boolean contains(Object o) 해당 컬렉션이 전달된 객체를 포함하고 있는지를 확인함.
boolean equals(Object o) 해당 컬렉션과 전달된 객체가 같은지를 확인함.
boolean isEmpty() 해당 컬렉션이 비어있는지를 확인함.
Iterator<E> iterator() 해당 컬렉션의 반복자(iterator)를 반환함.
boolean remove(Object o) 해당 컬렉션에서 전달된 객체를 제거함. (선택적 기능)
int size() 해당 컬렉션의 요소의 총 개수를 반환함.
Object[] toArray() 해당 컬렉션의 모든 요소를 Object 타입의 배열로 반환함.

 


List 인터페이스란?

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

 

대표적 List 컬렉션 클래스에 속하는 클래스

-  ArrayList<E>

-  LinkedList<E>

-  Vector<E>

-  Stack<E>

 


List  인터페이스 메소드

List 인터페이스는 Collection 인터페이스를 상속받으므로, Collection 인터페이스에서 정의한 메소드도 모두 사용할 수 있습니다.

 

List 인터페이스에서 제공하는 주요 메소드

메소드 설명
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의 마지막 요소부터 역방향으로 찾음)
Object remove(int index) 지정된 위치(index)에 있는 객체를 삭제하고 삭제된 객체를 반환한다.
Object set(int index, Object element) 지정된 위치(index)에 객체(element)를 저장한다.
oid sort(Comparator c) 지정된 비교자(comparator)로 List를 정렬한다.
List subList(int fromIndex, int toIndex) 지정된 범위(fromIndex 부터 toIndex)에 있는 객체를 반환한다

 

 


Set 인터페이스란?

중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용된다.

 

대표적 Set 컬렉션 클래스에 속하는 클래스

-  HashSet<E>

-  TreeSet<E>

 


Map 인터페이스란?

Map 인터페이스는 Collection 인터페이스와는 다른 저장 방식을 가집니다.

Map 인터페이스를 구현한 Map 컬렉션 클래스들은 키와 값을 하나의 쌍으로 저장하는 방식(key-value 방식)을 사용합니다.

여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 합니다.

 

Map 인터페이스를 구현한 모든 Map 컬렉션 클래스의 특징

- 요소의 저장 순서를 유지하지 않음.

- 키는 중복을 허용하지 않지만, 값의 중복은 허용함. 

 

대표적 Map 컬렉션 클래스에 속하는 클래스

-  HashMap<K, V>

-  Hashtable<K, V>

-  TreeMap<K, V>

 

메서드 설명
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() 해시코드를 반환
booelan isEmpty() Map이 비었는지 확인
Set keySet() Map에 저장된 모든 key객체를 반환
Object put(Object key, Object value) Map에 저장된 value객체를 key객체에 연결(mapping)하여 저장
void putAll(Mapt t) 지정된 Map의 모든 key-value쌍을 추가
Object remove(Object key) 지정된 key객체와 일치하는 key-value객체를 삭제
int size() Map에 저장된 key-value쌍의 개수를 반환
Collection values() Map에 저장된 모든 value객체를 반환

values()의 반환타입이 Collection이고, keySet()의 반환타입이 Set인 이유는 value는 중복이 가능하지만 key는 중복이 불가능 하기 때문이다. 

 


Map.Entry 인터페이스란?

Map.Entry 인터페이스는 Map 인터페이스의 내부 인터페이스이다.

내부 클래스처럼 인터페이스도 인터페이스 안에 인터페이스를 정의할 수 있다.

Map에 저장되는 key-value쌍을 다루기 위해 내부적으로 Entry 인터페이스를 정의되었다.

 

메서드 인터페이스
booelan equals(Object o) 동일한 Entry인지 비교
Object getKey() Entry의 key객체를 반환
Object getValue() Entry의 value객체를 반환
int hashCode() Entry의 해시코드를 반환
Object setValue(Object value) Entry의 value객체를 지정된 객체로 변경

 

 

 

* 참고자료 : JAVA의 정석

반응형

'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] LinkedList  (0) 2023.01.05
[JAVA] ArrayList 사용방법  (1) 2023.01.05
[JAVA] BigInteger , BigDecimal 클래스  (1) 2022.12.14
[JAVA] StringTokenizer 클래스  (0) 2022.12.14
[JAVA] Scanner클래스  (0) 2022.12.13