๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–‹๏ธ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[๋ฉ”์„œ๋“œ] Map ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ ๋ชจ์Œ

by OR15A 2023. 11. 30.

2023.11.14 - [๐Ÿ–ฅ๏ธ ๋ฐฑ์—”๋“œ/Java] - [ch.11] ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ Map

 

int size(): ๋งต์— ์ €์žฅ๋œ ํ‚ค-๊ฐ’ ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

boolean isEmpty(): ๋งต์ด ๋น„์–ด์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งต์ด ๋น„์–ด์žˆ์œผ๋ฉด true, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

boolean containsKey(Object key): ๋งต์— ํŠน์ • ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋ฉด true, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

boolean containsValue(Object value): ๋งต์— ํŠน์ • ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด true, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

V get(Object key): ์ง€์ •๋œ ํ‚ค์— ์—ฐ๊ฒฐ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ‚ค๊ฐ€ ๋งต์— ์—†์œผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

V put(K key, V value): ์ง€์ •๋œ ํ‚ค์™€ ๊ฐ’์„ ๋งต์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ‚ค๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ์ด์ „ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

V remove(Object key): ์ง€์ •๋œ ํ‚ค์™€ ๊ทธ์— ๋Œ€์‘๋˜๋Š” ๊ฐ’์„ ๋งต์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋ฉด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

void putAll(Map<? extends K, ? extends V> m): ๋‹ค๋ฅธ ๋งต์˜ ๋ชจ๋“  ํ‚ค-๊ฐ’ ์Œ์„ ํ˜„์žฌ ๋งต์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

void clear(): ๋งต์˜ ๋ชจ๋“  ํ‚ค-๊ฐ’ ์Œ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

Set<K> keySet(): ๋งต์˜ ๋ชจ๋“  ํ‚ค๋ฅผ ํฌํ•จํ•˜๋Š” ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Collection<V> values(): ๋งต์˜ ๋ชจ๋“  ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ์ปฌ๋ ‰์…˜์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Set<Map.Entry<K, V>> entrySet(): ๋งต์˜ ๋ชจ๋“  ํ‚ค-๊ฐ’ ์Œ์„ ํฌํ•จํ•˜๋Š” ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์Œ์€ Map.Entry<K, V> ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

boolean equals(Object o): ๋งต์ด ์ง€์ •๋œ ๊ฐ์ฒด์™€ ๋™์ผํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

int hashCode(): ๋งต์˜ ํ•ด์‹œ ์ฝ”๋“œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

default V getOrDefault(Object key, V defaultValue): ์ง€์ •๋œ ํ‚ค์— ์—ฐ๊ฒฐ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ‚ค๊ฐ€ ๋งต์— ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

default void forEach(BiConsumer<? super K, ? super V> action): ๋งต์˜ ๊ฐ ํ‚ค-๊ฐ’ ์Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function): ๋งต์˜ ๋ชจ๋“  ํ‚ค-๊ฐ’ ์Œ์„ ์ฃผ์–ด์ง„ ํ•จ์ˆ˜์— ๋”ฐ๋ผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

default V putIfAbsent(K key, V value): ์ง€์ •๋œ ํ‚ค๊ฐ€ ์•„์ง ๋งต์— ์—†๋Š” ๊ฒฝ์šฐ, ํ‚ค์™€ ๊ฐ’์„ ๋งต์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ‚ค๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ํ˜„์žฌ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

default boolean remove(Object key, Object value): ๋งต์—์„œ ์ง€์ •๋œ ํ‚ค์™€ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฑฐ์— ์„ฑ๊ณตํ•˜๋ฉด true๋ฅผ, ์‹คํŒจํ•˜๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

default boolean replace(K key, V oldValue, V newValue): ๋งต์— ์ €์žฅ๋œ ํ‚ค์˜ ํ˜„์žฌ ๊ฐ’์ด ์ง€์ •๋œ ๊ฐ’๊ณผ ๋™์ผํ•œ ๊ฒฝ์šฐ, ์ƒˆ ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ฒด์— ์„ฑ๊ณตํ•˜๋ฉด true๋ฅผ, ์‹คํŒจํ•˜๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

default V replace(K key, V value): ์ง€์ •๋œ ํ‚ค๊ฐ€ ๋งต์— ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ํ‚ค์˜ ๊ฐ’์„ ์ƒˆ ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction): ์ง€์ •๋œ ํ‚ค๊ฐ€ ๋งต์— ์—†๊ฑฐ๋‚˜ null์ธ ๊ฒฝ์šฐ, ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ƒˆ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ณ  ๋งต์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

default V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction): ์ง€์ •๋œ ํ‚ค๊ฐ€ ๋งต์— ์žˆ๊ณ , ํ•ด๋‹น ํ‚ค์— ๋Œ€ํ•œ ๊ฐ’์ด null์ด ์•„๋‹Œ ๊ฒฝ์šฐ, ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ฐ’์„ ์žฌ๊ณ„์‚ฐํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋งต์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

default V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction): ์ง€์ •๋œ ํ‚ค์— ๋Œ€ํ•œ ์ƒˆ ๊ฐ’์„ ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐํ•˜๊ณ  ๋งต์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

default V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction): ์ง€์ •๋œ ํ‚ค์— ๋Œ€ํ•œ ๊ฐ’์ด ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ’์„ ๊ฒฐํ•ฉํ•˜๊ณ , ๊ฐ’์ด ์—†์œผ๋ฉด ์ƒˆ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

static <K, V> Map<K, V> of(): ๋นˆ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋งต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

static <K, V> Map<K, V> of(K k1, V v1) ๋“ฑ: ํ•œ ๊ฐœ ์ด์ƒ์˜ ํ‚ค-๊ฐ’ ์Œ์„ ํฌํ•จํ•˜๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋งต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

static <K, V> Entry<K, V> entry(K k, V v): Map.Entry ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ‚ค์™€ ๊ฐ’ ์Œ์„ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 


interface Entry<K, V> ๋‚ด์˜ ๋ฉ”์„œ๋“œ๋“ค:

getKey(), getValue(): ๊ฐ๊ฐ ์—”ํŠธ๋ฆฌ์˜ ํ‚ค์™€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

setValue(V value): ์—”ํŠธ๋ฆฌ์˜ ๊ฐ’์„ ์ƒˆ ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.


Comparator ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋“ค:

comparingByKey(), comparingByValue(): ํ‚ค ๋˜๋Š” ๊ฐ’์— ๋”ฐ๋ผ Map.Entry ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•˜๋Š” Comparator๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

comparingByKey(Comparator<? super K> cmp), comparingByValue(Comparator<? super V> cmp): ์ฃผ์–ด์ง„ Comparator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค ๋˜๋Š” ๊ฐ’์— ๋”ฐ๋ผ Map.Entry ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

 

int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(Object key); V put(K key, V value); V remove(Object key); void putAll(Map<? extends K, ? extends V> m); void clear(); Set<K> keySet(); Collection<V> values(); Set<Map.Entry<K, V>> entrySet(); boolean equals(Object o); int hashCode(); default V getOrDefault(Object key, V defaultValue) { V v; return (((v = get(key)) != null) || containsKey(key)) ? v : defaultValue; } default void forEach(BiConsumer<? super K, ? super V> action) default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function) default V putIfAbsent(K key, V value) default boolean remove(Object key, Object value) default boolean replace(K key, V oldValue, V newValue) default V replace(K key, V value) default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) default V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) default V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) default V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) static <K, V> Map<K, V> of() static <K, V> Map<K, V> of(K k1, V v1) static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3) static <K, V> Entry<K, V> entry(K k, V v)


interface Entry<K, V> {
K getKey(); V getValue(); V setValue(V value); boolean equals(Object o); int hashCode(); public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K, V>> comparingByKey() atic <K, V extends Comparable<? super V>> Comparator<Map.Entry<K, V>> comparingByValue() public static <K, V> Comparator<Map.Entry<K, V>> comparingByKey(Comparator<? super K> cmp) public static <K, V> Comparator<Map.Entry<K, V>> comparingByValue(Comparator<? super V> cmp)
}