본문 바로가기
개발언어/Java : 자바

자바 쉽게 배우기 16 - 컬렉션 프레임워크(3) : Map, Iterator

by 개발자D 2023. 2. 10.

컬렉션 프레임워크(3) - MAP

이전글 보러 가기

 

자바 쉽게 배우기 14 - 컬렉션 프레임워크(1) : List

컬렉션 프레임워크 컬렉션 프레임워크는 배열처럼 다수의 데이터를 한 묶음으로 보관, 처리할 수 있는 구조를 의미합니다. 배열보다 많은 기능을 가지고 있어 자주 사용됩니다. jdk1.2에 등장했

devdharu.tistory.com

 

자바 쉽게 배우기 15 - 컬렉션 프레임워크(2) : Set, Queue

이전글 보러 가기 자바 쉽게 배우기 14 - 컬렉션 프레임워크(1) : List 컬렉션 프레임워크 컬렉션 프레임워크는 배열처럼 다수의 데이터를 한 묶음으로 보관, 처리할 수 있는 구조를 의미합니다. 배

devdharu.tistory.com

인터페이스 특징
List 순서가 있는 데이터의 집합으로 순서로 구분이 가능하기 때문에 데이터의 중복을 허용합니다.

구현 클래스 : ArrayList, LinkedList, Stack, Vector 등
Set 순서가 없는 데이터의 집합으로 List와 달리 데이터의 중복을 허용하지 않습니다.

구현 클래스 : HashSet, TreeSet 등
Map 키(key)와 값(vallue)의 쌍(pair)으로 이루어진 데이터의 집합입니다.
순서가 없으며 키의 중복을 허용하지 않고, 키로 구분이 가능하기 때문에 값의 중복을 허용합니다.

구현클래스 : HashMap, TreeMap, Hashtable, Properties 등

 


Map 인터페이스

Map은 키(key)와 값(vallue)의 쌍(pair)으로 이루어진 데이터의 집합입니다. 키(key)가 인덱스 역할을 대신하지만 List처럼 순서가 있는 것은 아닙니다. 인덱스처럼 키(key)를 통해 값(value)을 찾을 수 있는 것뿐입니다. 키(key)는 중복될 수 없으며, 키(key)로 구분이 가능하기 때문에 값(value)은 중복되어도 상관없습니다. Map은 List, Set과 달리 Collection 인터페이스를 상속받지 않습니다.

 

주요 메서드

리턴타입 메서드명 설명
void  clear()  Map에 저장된 모든 요소를 제거
boolean  containsKey(Object key)  지정한 key가 Map에 있는지 여부를 리턴
boolean  containsValue(Object value) 지정한 value가 Map에 있는지 여부를 리턴
get(Object key) 지정한 key에 해당하는 value를 Map에서 찾아 리턴, 없으면 null을 리턴
* V 는 값(value)의 자료형을 의미합니다.
default V getOrDefault(Object key, V defaultValue) get()과 동일한 기능을 하나 찾는 값이 없으면 지정한 defaultValue를 리턴
int  hashCode() Map의 해쉬코드를 리턴
boolean  isEmpty() Map이 비어있는지 여부를 리턴
Set<K> keySet() 맵의 key들을 Set으로 생성하여 리턴
* K 는 키(key)의 자료형을 의미합니다.
put(K key, V value)  지정한 key와 value를 맵에 저장
void putAll(Map<? extends K,? extends V> m)  K를 상속받는 key와 V를 상속받는 value들을 가진 Map의 모든 요소를 해당 맵에 저장
V remove(Object key)  지정된 key에 해당하는 value를 삭제한 후 리턴
default boolean remove(Object key, Object value) 지정된 key와 value에 해당하는 값을 삭제한 후 삭제 여부를 리턴
default V  replace(K key, V value)  지정된 key에 해당하는 value을 지정한 value로 변경 후 리턴
default boolean replace(K key, V oldValue, V newValue) 지정된 key와 oldValued에 해당하는 value를 newValue로 변경
int  size() Map에 저장된 데이터의 개수
Collection<V> values()  Map에 저장된 모든 요소의 값들을 컬렉션 형태로 리턴

 

해쉬코드란 무엇인가요?

- JVM에서 다른 객체와의 구분을 위해 사용하는 식별값입니다.

 

- Hashmap 클래스

Map을 구현한 클래스들 중 가장 많이 사용되는 클래스입니다.

 

생성자

HashMap() : 기본 HashMap 인스턴스 생성(기본용량 16 / 로드 팩터 0.75)

HashMap(Map <? extends K,? extends V> m) : 제네릭으로 지정한 자료형 K를 상속받는 key와 V를 상속받는 value들을 가진 Map m의 모든 요소들을 포함하는 HashMap 인스턴스 생성

HashMap(int initialCapacity) : 지정한 initialCapacity를 초기 용량으로 하는 HashMap 인스턴스 생성 HashMap(int initialCapacity, float loadFactor) : 지정한 initialCapacity를 초기용량으로, 지정한 loadFactor를 로드팩터로 설정하여 HashMap 인스턴스 생성

 

❓ 로드팩터란 무엇인가요? 

컬렉션 용량을 두배로 늘리게 되는 임계치로 기본값은 0.75입니다.

예시 ) 로드팩터가 0.75면 컬렉션 저장공간의 75%가 채워졌을 때 용량이 두배로 늘어납니다.

 

전용 메서드는 없으며, Map 인터페이스를 구현했기 때문에 Map 메서드를 사용합니다. 

 


Iterator, ListIterator 인터페이스

컬렉션 프레임워크의 요소들에 접근하는 방법을 설계한 인터페이스입니다. 컬렉션 프레임워크는 인덱스가 없어 배열처럼 요소에 반복적으로 하나씩 접근하는 것이 어렵습니다. 그렇기에 전용 Iterator와 while문을 사용하여 이 기능을 대신합니다.

Iterator

Iterator를 사용하면 처음부터 끝까지 한 방향으로 한 번만 요소들에 접근할 수 있습니다. 다음 요소가 있는지 확인하고 읽어오는 방식으로 사용되기 때문입니다. Collection interface의 iterator() 메서드로 생성된 인스턴스들의 자료형이기도 합니다.

 

주요 메서드

리턴타입 메서드명 설명
boolean  hasNext() 읽어 올 요소가 남아있는지 여부를 리턴
E next() 다음 요소를 리턴
void remove() next() 다음에 사용해야 하며, next()로 읽어 온 요소를 삭제

 

ListIterator

List 전용 Iterator로 기존의 Iterator보다 향상된 기능들을 제공합니다. Iterator와 달리 다음 요소뿐만 아니라 이전 요소도 읽어올 수 있습니다.

리턴타입 메서드명 설명
void add(E e) 컬렉션에 새로운 객체 e 추가
boolean hasPrevious() 읽어 올 이전 요소가 남아있는지 여부를 리턴
E previous() 이전 요소를 리턴
int nextIndex() 다음 요소의 index를 리턴
int previousIndex() 이전 요소의 index를 리턴
void set(E e)  next()나 previous() 다음에 사용해야 하며, next() 또는 previous()로 읽어 온 요소를 지정한 객체로 변경

* Iterator의 remove()나 set(E e)은 next()나 previous()를 호출하지 않고 사용하면 IllegalStateException이 발생합니다.


컬렉션 프레임워크의 마지막 주요 인터페이스 Map과 Iterator에 대해 살펴보았습니다. 배열보다 향상된 기능을 사용하고 싶을 때 사용해 주시면 되겠습니다. 다음 글에서는 짧게 Arrays클래스에 대해 다뤄보도록 하겠습니다.

 

자바 쉽게 배우기 17 - Arrays

Arrays 클래스 Arrays는 java.util패키지의 속하는 클래스입니다. Arrays 클래스의 메서드는 전부 static 메서드이므로 Arrays.메서드명()을 사용해 호출할 수 있습니다. 복사 리턴타입 메서드명 설명 배열 c

devdharu.tistory.com