[JAVA] HashMap

HashMap

1. ๊ฐœ๋…

  • Key-Value๋กœ ์ €์žฅ
  • ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด์‰ฌํ…Œ์ด๋ธ” ์‚ฌ์šฉ
  • Key๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ (Key๋งŒ ์ €์žฅ -> HashSet)
  • ํ‚ค๋Š” ์ค‘๋ณต ๋ถˆ๊ฐ€, ๊ฐ’์€ ์ค‘๋ณต ๊ฐ€๋Šฅ
  • ์ˆœ์„œ๋ฅผ ๋ณด์žฅ X (LinkedHashMap์€ ์ˆœ์„œ ๋ณด์žฅ)
  • ์ •์ˆ˜ํ˜• key์˜ ๊ฒฝ์šฐ, 0~65535๊นŒ์ง€๋Š” ๋ฒ„ํ‚ท์˜ ์ธ๋ฑ์Šค์™€ key๊ฐ’์ด ๋™์ผ -> key๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ˜•ํƒœ

2. ์„ ์–ธ

HashMap<String, String> mp = new HashMap<>();
// ๊ถŒ์žฅ ๋ฐฉ์‹: ์ธํ„ฐํŽ˜์ด์Šค๋กœ
Map<String, String> map = new HashMap<>();

3. ์ฃผ์š” ๋ฉ”์†Œ๋“œ

๋ฉ”์„œ๋“œ ์„ค๋ช… ํ‰๊ท /์ตœ์•…
put(k, v) ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋˜๋Š” ์ˆ˜์ •(์ด๋ฏธ ํ•ด๋‹น ํ‚ค O) O(1)/O(N)
get(k) ๋ฐ์ดํ„ฐ ์กฐํšŒ (k์—†์œผ๋ฉด null) O(1)/O(N)
containsKey(k) ์ผ์น˜ํ•˜๋Š” key (boolean) O(1)/O(N)
containsValue(v) ํ•ด๋‹น ๊ฐ’ ์กด์žฌ ์—ฌ๋ถ€ ๋ฐ˜ํ™˜ O(N)/O(N)
size() ํ‚ค-๊ฐ’ ์Œ์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜ O(1)/O(1)
remove(k) ํ•ด๋‹น ํ‚ค ์‚ญ์ œ O(1)/O(N)
clear() ๋ชจ๋“  ํ•ญ๋ชฉ ์‚ญ์ œ O(N)/O(N)
isEmpty() ๋งต์ด ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ O(1)/O(1)
keySet() ํ‚ค๋“ค๋งŒ Set์œผ๋กœ ๋ฐ˜ํ™˜ O(N)/O(N)
values() ๊ฐ’๋“ค๋งŒ Collection์œผ๋กœ ๋ฐ˜ํ™˜ O(N)/O(N)
entrySet() Map.Entry์˜ ์ง‘ํ•ฉ ๋ฐ˜ํ™˜, ๋ฐ˜๋ณต๋ฌธ์— ์‚ฌ์šฉ O(N)/O(N)

์ฝ”๋“œ

  1. put(k, v)
         map.put("ํ•˜์ดํ","์ฟ ๋กœ์˜ค");
         map.put("ํ—Œํ„ฐํ—Œํ„ฐ", "ํžˆ์†Œ์นด");
         System.out.println(map);\
     // put์œผ๋กœ ๊ฐ’ ์ˆ˜์ •
         map.put("ํ•˜์ดํ", "์ธ ํ‚ค์‹œ๋งˆ");
         System.out.println(map);
    
     {ํ—Œํ„ฐํ—Œํ„ฐ=ํžˆ์†Œ์นด, ํ•˜์ดํ=์ฟ ๋กœ์˜ค}
     {ํ—Œํ„ฐํ—Œํ„ฐ=ํžˆ์†Œ์นด, ํ•˜์ดํ=์ธ ํ‚ค์‹œ๋งˆ}
    
  2. get(k)
         System.out.println("ํ•˜์ดํ์—๋Š” "+map.get("ํ•˜์ดํ")+"๊ฐ€ ์žˆ๋‹ค");
         // ์—†๋Š” key๋กœ ์กฐํšŒ -> null
         System.out.println("์ฃผ์ˆ ํšŒ์ „์€ "+map.get("์ฃผ์ˆ ํšŒ์ „")+"์ด ์—†๋Š”๋ฐ");
    
         ํ•˜์ดํ์—๋Š” ์ธ ํ‚ค์‹œ๋งˆ๊ฐ€ ์žˆ๋‹ค
         ์ฃผ์ˆ ํšŒ์ „์€ null์ด ์—†๋Š”๋ฐ
    
  3. containsKey(k)
         if(map.containsKey("ํ•˜์ดํ")) {
             System.out.println("ํ•˜์ดํ๊ฐ€ ์žˆ๋‹ค...!");
         }
    
         ํ•˜์ดํ๊ฐ€ ์žˆ๋‹ค...!
    
  4. containsValue(v)
     if(!map.containsValue("๋‚˜๊ธฐ")) {
             map.put("๋ธ”๋ฃจ๋ก", "๋‚˜๊ธฐ");
             System.out.println(map);
         }
    
         {ํ—Œํ„ฐํ—Œํ„ฐ=ํžˆ์†Œ์นด, ๋ธ”๋ฃจ๋ก=๋‚˜๊ธฐ, ํ•˜์ดํ=์ธ ํ‚ค์‹œ๋งˆ}
    
  5. size()
         System.out.println("ํ˜„์žฌ ๊ฐœ์ˆ˜๋Š” "+map.size()+"๊ฐœ๋‹ค!");
    
         ํ˜„์žฌ ๊ฐœ์ˆ˜๋Š” 3๊ฐœ๋‹ค!
    
  6. remove(k)
         System.out.println(map);
         map.remove("ํ•˜์ดํ");
         System.out.println(map);
    
         {ํ—Œํ„ฐํ—Œํ„ฐ=ํžˆ์†Œ์นด, ๋ธ”๋ฃจ๋ก=๋‚˜๊ธฐ, ํ•˜์ดํ=์ธ ํ‚ค์‹œ๋งˆ}
         {ํ—Œํ„ฐํ—Œํ„ฐ=ํžˆ์†Œ์นด, ๋ธ”๋ฃจ๋ก=๋‚˜๊ธฐ}
    
  7. clear()
         System.out.println(map);
         map.clear();
         System.out.println(map);
    
         {ํ—Œํ„ฐํ—Œํ„ฐ=ํžˆ์†Œ์นด, ๋ธ”๋ฃจ๋ก=๋‚˜๊ธฐ}
         {}
    
  8. isEmpty()
         if(map.isEmpty()) {
             map.put("NCIS", "๋””๋…ธ์กฐ" );
             map.put("Bones", "๋ถ€์Šค");
             map.put("newsroom", "ํ•˜ํผ");
         }
         System.out.println(map);
    
         {Bones=๋ถ€์Šค, NCIS=๋””๋…ธ์กฐ, newsroom=ํ•˜ํผ}
    
  9. keySet()
        // type ํ™•์ธ
        System.out.println(map.keySet().getClass());
        System.out.println(map.keySet());
        // keySet์€ ์ฐธ์กฐ ํ˜•ํƒœ๊ธฐ ๋•Œ๋ฌธ์— key์‚ญ์ œ์‹œ hashMap์—์„œ๋„ ์‚ญ์ œ๋จ
        Set<String> keys = map.keySet();
        keys.remove("NCIS");
        System.out.println(keys);
        System.out.println(map);
    
        class java.util.HashMap$KeySet
        [Bones, NCIS, newsroom]
        [Bones, newsroom]
        {Bones=๋ถ€์Šค, newsroom=ํ•˜ํผ}
    
  10. values()
        Collection<String> vals = map.values();
        System.out.println(vals);
    
        [๋ถ€์Šค, ํ•˜ํผ]
    
  11. entrySet()
        Set<Map.Entry<String, String>> mapE = map.entrySet();
        System.out.println(mapE);
    		
        //๋ฐ˜๋ณต๋ฌธ์— ์‚ฌ์šฉ
        for(Map.Entry<String, String> m : map.entrySet()) {
            System.out.println("์ œ๋ชฉ: " + m.getKey());
            System.out.println("์บ๋ฆญํ„ฐ: "+m.getValue());
        }
    
        [Bones=๋ถ€์Šค, newsroom=ํ•˜ํผ]
        ์ œ๋ชฉ: Bones
        ์บ๋ฆญํ„ฐ: ๋ถ€์Šค
        ์ œ๋ชฉ: newsroom
        ์บ๋ฆญํ„ฐ: ํ•˜ํผ
    

4. getOrDefault() & putIfAbsent()

  1. getOrDefault(k, ๊ธฐ๋ณธ๊ฐ’)
    • ์—†์„ ๋•Œ ๊ธฐ๋ณธ๊ฐ’
    • containsKey->get์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌ
    • O(1)/O(N)
         System.out.println(map.getOrDefault("westwing", "์—†๋‹ค ์š”๋†ˆ์•„!"));
      
         ์—†๋‹ค ์š”๋†ˆ์•„!
      
  2. putIfAbsent(k, v)
    • k ์—†์„ ๋•Œ๋งŒ ์‚ฝ์ž…
    • put์œผ๋กœ ๊ธฐ์กด ๊ฐ’ ์ˆ˜์ •๋˜๋Š” ๊ฒƒ ๋ฐฉ์ง€
    • ์กฐ๊ฑด๋ถ€ ์‚ฝ์ž… ๋‹จ์ˆœํ™”
    • O(1)/O(N)
        map.putIfAbsent("Bones", "ํ•˜์ง„์Šค");
        System.out.println(map);
      
        {Bones=๋ถ€์Šค, newsroom=ํ•˜ํผ}
      

Categories:

Updated:

Leave a comment