๐Ÿ’ป ์ฝ”๋”ฉ ์ผ๊ธฐ : [JAVA] '์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ(Collection Framework) - Map ์ธํ„ฐํŽ˜์ด์Šค' ํŽธ

ybkยท2024๋…„ 3์›” 20์ผ

java

๋ชฉ๋ก ๋ณด๊ธฐ
33/40
post-thumbnail

๐Ÿ”” '์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ(Collection Framework)- Set ์ธํ„ฐํŽ˜์ด์Šค'์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž!


๐Ÿ’Ÿ HashMap๊ณผ Hashtable

  • ํ‚ค(key)์™€ ๊ฐ’(value)์„ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  • ํ•ด์‹ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ์ข‹์Šต๋‹ˆ๋‹ค.
  • ํ‚ค์™€ ๊ฐ’์„ Object ํƒ€์ž…์œผ๋กœ ์ €์žฅํ•˜์ง€๋งŒ ์ฃผ๋กœ String์„ ๋Œ€๋ฌธ์ž ๋˜๋Š” ์†Œ๋ฌธ์ž๋กœ ํ†ต์ผํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค(key) : ์ปฌ๋ ‰์…˜ ๋‚ด์˜ ํ‚ค(key) ์ค‘์—์„œ ์œ ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ’(value) : ํ‚ค์™€ ๋‹ฌ๋ฆฌ ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค(key)๋Š” ์•„์ด๋””, ๊ฐ’(value)์€ ํŒจ์Šค์›Œ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ด๋””๋Š” ์ค‘๋ณต๋˜๋ฉด ์•ˆ๋˜์ง€๋งŒ ํŒจ์Šค์›Œ๋“œ๋Š” ์ค‘๋ณต๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.


๐ŸŸฆ HashMap ์ƒ์„ฑ์ž์™€ ๋ฉ”์„œ๋“œ

์ƒ์„ฑ์ž์™€ ๋ฉ”์„œ๋“œ์„ค๋ช…
HashMap()๋น„์–ด ์žˆ๋Š” HashMap์„ ์ƒ์„ฑํ•œ๋‹ค.
HashMap(int initialCapacity)์ดˆ๊ธฐ ์šฉ๋Ÿ‰์„ ์„ค์ •ํ•˜์—ฌ HashMap์„ ์ƒ์„ฑํ•œ๋‹ค.
HashMap(int initialCapacity, float loadFactor)์ดˆ๊ธฐ ์šฉ๋Ÿ‰๊ณผ ๋กœ๋“œ ํŒฉํ„ฐ๋ฅผ ์„ค์ •ํ•˜์—ฌ HashMap์„ ์ƒ์„ฑํ•œ๋‹ค.
HashMap(Map<? extends K, ? extends V> m)์ง€์ •๋œ Map์˜ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” HashMap์„ ์ƒ์„ฑํ•œ๋‹ค.
void clear()HashMap์—์„œ ๋ชจ๋“  ๋งคํ•‘์„ ์ œ๊ฑฐํ•œ๋‹ค.
Object clone()HashMap์˜ ์–•์€ ๋ณต์‚ฌ๋ณธ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
boolean containsKey(Object key)์ง€์ •๋œ ํ‚ค๊ฐ€ HashMap์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค.
boolean containsValue(Object value)์ง€์ •๋œ ๊ฐ’์ด ํ•˜๋‚˜ ์ด์ƒ์˜ ํ‚ค์— ๋งคํ•‘๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
Set<Map.Entry<K, V>> entrySet()HashMap์— ์žˆ๋Š” ๋งคํ•‘์˜ Set ๋ทฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
V get(Object key)์ง€์ •๋œ ํ‚ค์— ๋งคํ•‘๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
boolean isEmpty()HashMap์ด ๋น„์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค.
HashMap์— ์žˆ๋Š” ํ‚ค์˜ Set ๋ทฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
V put(K key, V value)์ง€์ •๋œ ํ‚ค์— ์ง€์ •๋œ ๊ฐ’์„ ๋งคํ•‘ํ•œ๋‹ค.
void putAll(Map<? extends K, ? extends V> m)์ง€์ •๋œ Map์˜ ๋ชจ๋“  ๋งคํ•‘์„ HashMap์— ์ถ”๊ฐ€ํ•œ๋‹ค.
V remove(Object key)HashMap์—์„œ ์ง€์ •๋œ ํ‚ค์˜ ๋งคํ•‘์„ ์ œ๊ฑฐํ•œ๋‹ค.
int size()HashMap์— ์žˆ๋Š” ๋งคํ•‘ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Collection<V> values()HashMap์— ์žˆ๋Š” ๊ฐ’์˜ Collection ๋ทฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐ŸŸฆ HashMap ์˜ˆ์‹œ

import java.util.HashMap;
import java.util.Scanner;

public class C06HashMap {
    public static void main(String[] args) {
        HashMap map = new HashMap();
        map.put("myId","1234");
        map.put("asdf","222"); 
        map.put("asdf","1234"); //ํ‚ค ์ค‘๋ณต๋˜์–ด ๋ฎ์–ด์”€

        Scanner scanner = new Scanner(System.in);

        while (true){
            System.out.println("id์™€ password๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.");
            System.out.print("id : ");
            String id = scanner.nextLine().trim();

            System.out.print("password : ");
            String password = scanner.nextLine().trim();
            System.out.println();

            if(!map.containsKey(id)){
                System.out.println("์ž…๋ ฅํ•˜์‹  id๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.");
                continue;
            }else{
                if(!(map.get(id)).equals(password)){
                    System.out.println("๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.");
                }else {
                    System.out.println("id์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.");
                    break;
                }
            }

        }
    }
}

id์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ €์žฅํ•œ ํ›„ ์ž…๋ ฅ ๋œ id๋ฅผ ํ‚ค๋กœ HashMap์—์„œ ๊ฒ€์ƒ‰ํ•ด์„œ ์–ป์€ ๊ฐ’(ํŒจ์Šค์›Œ๋“œ)์„ ์ž…๋ ฅ๋œ ํŒจ์Šค์›Œ๋“œ์™€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

import java.util.*;

import static java.lang.StringTemplate.STR;

public class C07HashMap {
    public static void main(String[] args) {

        HashMap map = new HashMap();
        map.put("๊น€์ž๋ฐ”", 90);
        map.put("๊น€์ž๋ฐ”", 100);
        map.put("์ด์ž๋ฐ”", 100);
        map.put("๊ฐ•์ž๋ฐ”", 80);
        map.put("์•ˆ์ž๋ฐ”", 90);

        Set set = map.entrySet();
        Iterator it = set.iterator();

        while (it.hasNext()){
            Map.Entry e = (Map.Entry) it.next(); //ํ•œ ์ค„ ์”ฉ ์ถœ๋ ฅ
            System.out.println(STR."์ด๋ฆ„ : \{e.getKey()}, ์ ์ˆ˜ : \{e.getValue()}");
        }

        set = map.keySet();
        System.out.println("์ฐธ๊ฐ€์ž ๋ช…๋‹จ : " +set);

        Collection values = map.values();
        it = values.iterator();

        int total = 0;
        while (it.hasNext()){
            Integer i = (Integer) it.next();
            total += i.intValue();
        }

        System.out.println("์ด์  : " + total);
        System.out.println("ํ‰๊ท  : " + (double)total/set.size());
        System.out.println("์ตœ๊ณ ์ ์ˆ˜ : " + Collections.max(values));
        System.out.println("์ตœ์†Œ์ ์ˆ˜ : " + Collections.min(values));

    }
}

์ถœ๋ ฅ๊ฒฐ๊ณผ

์ด๋ฆ„ : ์•ˆ์ž๋ฐ”, ์ ์ˆ˜ : 90
์ด๋ฆ„ : ๊น€์ž๋ฐ”, ์ ์ˆ˜ : 100
์ด๋ฆ„ : ๊ฐ•์ž๋ฐ”, ์ ์ˆ˜ : 80
์ด๋ฆ„ : ์ด์ž๋ฐ”, ์ ์ˆ˜ : 100
์ฐธ๊ฐ€์ž ๋ช…๋‹จ : [์•ˆ์ž๋ฐ”, ๊น€์ž๋ฐ”, ๊ฐ•์ž๋ฐ”, ์ด์ž๋ฐ”]
์ด์  : 370
ํ‰๊ท  : 92.5
์ตœ๊ณ ์ ์ˆ˜ : 100
์ตœ์†Œ์ ์ˆ˜ : 80

entrySet()์€ ํ‚ค์™€ ๊ฐ’์„ ํ•จ๊ป˜ ์ฝ์–ด ์˜ฌ ์ˆ˜๋„ ์žˆ๊ณ  keySet()์ด๋‚˜ values()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ ๋”ฐ๋กœ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Set์€ ์ค‘๋ณต๋œ ์š”์†Œ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ , ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๊ธฐ ๋•Œ๋ฌธ์— entrySet(), keySet() ๋‘ ๋ฉ”์„œ๋“œ์—์„œ๋Š” Set์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • values()๋Š” List์™€ Set์˜ ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค์ธ Collection์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜ํ™˜๊ฐ’์ด Set์ด๋‚˜ List์™€ ๊ฐ™์€ ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•จ(์œ ์—ฐ์„ฑ)์ž…๋‹ˆ๋‹ค.

๐ŸŸฆ ํ•ด์‹ฑ๊ณผ ํ•ด์‹œํ•จ์ˆ˜

  • ํ•ด์‹ฑ : ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • ํ•ด์‹œํ…Œ์ด๋ธ”์€ ๋ฐฐ์—ด๊ณผ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์กฐํ•ฉ๋œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
    • ์ด์ฐจ์› ๋ฐฐ์—ด ํ˜•ํƒœ
    • ๋ฐฐ์—ด์˜ ์žฅ์ ์ธ ์ ‘๊ทผ์„ฑ + ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์žฅ์ ์ธ ๋ณ€๊ฒฝ ์œ ๋ฆฌ

๐Ÿ’Ÿ TreeMap

  • ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๋กœ ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ์— ์ ํ•ฉํ•œ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
  • HashMap์ด TreeMap ๋ณด๋‹ค ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ๋” ๋›ฐ์–ด๋‚˜ HashMap ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฒ”์œ„๊ฒ€์ƒ‰์ด๋‚˜ ์ •๋ ฌ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” TreeMap์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐ŸŸฆ TreeMap ์ƒ์„ฑ์ž์™€ ๋ฉ”์„œ๋“œ

์ƒ์„ฑ์ž์™€ ๋ฉ”์†Œ๋“œ์„ค๋ช…
TreeMap()๋น„์–ด ์žˆ๋Š” TreeMap์„ ์ƒ์„ฑํ•œ๋‹ค.
TreeMap(Comparator<? super K> comparator)์ง€์ •๋œ Comparator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ TreeMap์„ ์ƒ์„ฑํ•œ๋‹ค.
TreeMap(Map<? extends K, ? extends V> m)์ง€์ •๋œ Map์˜ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” TreeMap์„ ์ƒ์„ฑํ•œ๋‹ค.
TreeMap(SortedMap<K, ? extends V> m)์ง€์ •๋œ SortedMap์˜ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” TreeMap์„ ์ƒ์„ฑํ•œ๋‹ค.
void clear()TreeMap์—์„œ ๋ชจ๋“  ๋งคํ•‘์„ ์ œ๊ฑฐํ•œ๋‹ค.
Object clone()TreeMap์˜ ์–•์€ ๋ณต์‚ฌ๋ณธ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Comparator<? super K> comparator()TreeMap์—์„œ ์‚ฌ์šฉ ์ค‘์ธ Comparator๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
boolean containsKey(Object key)์ง€์ •๋œ ํ‚ค๊ฐ€ TreeMap์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค.
boolean containsValue(Object value)์ง€์ •๋œ ๊ฐ’์ด ํ•˜๋‚˜ ์ด์ƒ์˜ ํ‚ค์— ๋งคํ•‘๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
Set<Map.Entry<K, V>> entrySet()TreeMap์— ์žˆ๋Š” ๋งคํ•‘์˜ Set ๋ทฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Map.Entry<K, V> firstEntry()TreeMap์˜ ์ฒซ ๋ฒˆ์งธ (๊ฐ€์žฅ ์ž‘์€) ํ•ญ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
K firstKey()TreeMap์˜ ์ฒซ ๋ฒˆ์งธ (๊ฐ€์žฅ ์ž‘์€) ํ‚ค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Map.Entry<K, V> lastEntry()TreeMap์˜ ๋งˆ์ง€๋ง‰ (๊ฐ€์žฅ ํฐ) ํ•ญ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
K lastKey()TreeMap์˜ ๋งˆ์ง€๋ง‰ (๊ฐ€์žฅ ํฐ) ํ‚ค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Map.Entry<K, V> lowerEntry(K key)์ฃผ์–ด์ง„ ํ‚ค๋ณด๋‹ค ์ž‘์€ ๊ฐ€์žฅ ํฐ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋งคํ•‘์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
K lowerKey(K key)์ฃผ์–ด์ง„ ํ‚ค๋ณด๋‹ค ์ž‘์€ ๊ฐ€์žฅ ํฐ ํ‚ค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
NavigableSet<K> navigableKeySet()TreeMap์˜ ํ‚ค์— ๋Œ€ํ•œ ํƒ์ƒ‰ ๊ฐ€๋Šฅํ•œ Set ๋ทฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Map.Entry<K, V> ceilingEntry(K key)์ฃผ์–ด์ง„ ํ‚ค์™€ ๊ฐ™๊ฑฐ๋‚˜ ํฐ ํ‚ค ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋งคํ•‘์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
K ceilingKey(K key)์ฃผ์–ด์ง„ ํ‚ค์™€ ๊ฐ™๊ฑฐ๋‚˜ ํฐ ํ‚ค ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ํ‚ค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Map.Entry<K, V> floorEntry(K key)์ฃผ์–ด์ง„ ํ‚ค์™€ ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์€ ํ‚ค ์ค‘ ๊ฐ€์žฅ ํฐ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋งคํ•‘์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
K floorKey(K key)์ฃผ์–ด์ง„ ํ‚ค์™€ ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์€ ํ‚ค ์ค‘ ๊ฐ€์žฅ ํฐ ํ‚ค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Map.Entry<K, V> higherEntry(K key)์ฃผ์–ด์ง„ ํ‚ค๋ณด๋‹ค ํฐ ๊ฐ€์žฅ ์ž‘์€ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋งคํ•‘์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
K higherKey(K key)์ฃผ์–ด์ง„ ํ‚ค๋ณด๋‹ค ํฐ ๊ฐ€์žฅ ์ž‘์€ ํ‚ค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Map.Entry<K, V> pollFirstEntry()TreeMap์—์„œ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Map.Entry<K, V> pollLastEntry()TreeMap์—์„œ ๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค.
void putAll(Map<? extends K, ? extends V> map)์ง€์ •๋œ Map์˜ ๋ชจ๋“  ๋งคํ•‘์„ TreeMap์— ์ถ”๊ฐ€ํ•œ๋‹ค.
V put(K key, V value)์ง€์ •๋œ ํ‚ค์— ์ง€์ •๋œ ๊ฐ’์ด ๋งคํ•‘๋˜๋„๋ก ํ•œ๋‹ค.
V remove(Object key)TreeMap์—์„œ ์ง€์ •๋œ ํ‚ค์˜ ๋งคํ•‘์„ ์ œ๊ฑฐํ•œ๋‹ค.
int size()TreeMap์— ์žˆ๋Š” ๋งคํ•‘ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Collection<V> values()TreeMap์— ์žˆ๋Š” ๊ฐ’์˜ Collection ๋ทฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
profile
๊ฐœ๋ฐœ์ž ์ค€๋น„์ƒ~

0๊ฐœ์˜ ๋Œ“๊ธ€