[JAVA] HashSet & HashMap

๋ฆผ๋ฏผ์ง€ยท2025๋…„ 3์›” 11์ผ

Today I Learn

๋ชฉ๋ก ๋ณด๊ธฐ
21/62


ํ•ด์‰ฌ๋‹ˆ๊นŒ.. ๊ฐ์ž...ใ…Ž

1๏ธโƒฃ HashSet์ด๋ž€?

Java์˜ Collection ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜
์š”์†Œ๋ฅผ ์ €์žฅํ•  ๋•Œ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๊ณ , ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
๋‚ด๋ถ€์ ์œผ๋กœ HashMap์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„

import java.util.HashSet;

HashSet<String> set = new HashSet<>();

HashSet ํ™œ์šฉ๋ฒ•

๋ฉ”์„œ๋“œ์„ค๋ช…
add(E e)์š”์†Œ๋ฅผ ์ถ”๊ฐ€
remove(Object o)ํŠน์ • ์š”์†Œ๋ฅผ ์ œ๊ฑฐ
contains(Object o)์š”์†Œ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
size()์š”์†Œ์˜ ๊ฐœ์ˆ˜
isEmpty()๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ.
clear()๋ชจ๋“  ์š”์†Œ๋ฅผ ์ œ๊ฑฐ
iterator()์š”์†Œ๋“ค์„ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” Iterator ๋ฐ˜ํ™˜

์˜ˆ์ œ

๊ณผ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•ด HashSet์„ ์ดํ•ดํ•ด๋ณด์ž

public class Example {
    public static void main(String[] args) {
        HashSet<String> fruits = new HashSet<>();

        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");
        fruits.add("Apple");  // ์ค‘๋ณต๋œ ์š”์†Œ ์ถ”๊ฐ€ ์•ˆ๋จ.

        System.out.println(fruits); //์ถœ๋ ฅ : [Apple, Banana, Orange]
        
        if (fruits.contains("Banana")) {
            System.out.println("Banana๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.");
        } //์ถœ๋ ฅ : Banana๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

        fruits.remove("Orange");
        System.out.println(fruits); //์ถœ๋ ฅ : [Apple, Banana]
        
        System.out.println(fruits.size()); //์ถœ๋ ฅ : 2
    }
}

HashSet ์•ˆ์— ArrayList ์ถ”๊ฐ€ํ•˜๊ธฐ

HashSet ์•ˆ์— ArrayList๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ์‹œ๋ฅผ ๊ฐ™์ด ๋ด๋ณด์Ÿˆ

public class Example {
    public static void main(String[] args) {
        HashSet<ArrayList<String>> menuSet = new HashSet<>();

		//ํ–„๋ฒ… ๋ฆฌ์ŠคํŠธ
        ArrayList<String> Burgurs = new ArrayList<>();
        Burgurs.add("burger1");
		//์Œ๋ฃŒ์ˆ˜ ๋ฆฌ์ŠคํŠธ
        ArrayList<String> Drinks = new ArrayList<>();
        Drinks.add("์ฝœ๋ผ๋Š” ์ œ๋กœ์ง€์˜ˆใ…‹");
        Drinks.add("ํŽฉ์‹œ์ œ๋กœ ๋ง›์žˆ์Œ");
		//๋””์ €ํŠธ ๋ฆฌ์Šคํ‹‘
        ArrayList<String> Desserts = new ArrayList<>();
        dessertMenu.add("๋‹คํฌ์ดˆ์ฝœ๋ › ๋ง›๋„๋ฆฌ");

		menuSet.add(Burgers);
        menuSet.add(Drinks);
        menuSet.add(Desserts); //๋ฉ”๋‰ด์„ธํŠธ ํ•ด์‰ฌ์…‹ ์•ˆ์— ๋ฆฌ์ŠคํŠธ 3๊ฐœ ์ถ”๊ฐ€!

        // HashSet ๋‚ด์šฉ ์ถœ๋ ฅํ•˜๊ธฐ
        for (ArrayList<String> menu : menuSet) {
            System.out.println(menu);
        }
    }
}

๊ฐ๊ฐ ํ–„๋ฒ„๊ฑฐ, ์Œ๋ฃŒ์ˆ˜, ๋””์ €ํŠธ ๋ฉ”๋‰ด๋ฅผ ArrayList ์•ˆ์— ๋„ฃ์–ด์ฃผ๊ณ 
์ด ๋ฆฌ์ŠคํŠธ๋“ค์„ ๋ชจ๋‘ MenuSet์ด๋ผ๋Š” HashSet์— ๋„ฃ์–ด์ฃผ๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ถœ๋ ฅ๋˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

[burger1]
[์ฝœ๋ผ๋Š” ์ œ๋กœ์ง€์˜ˆใ…‹, ํŽฉ์‹œ์ œ๋กœ ๋ง›์žˆ์Œ]
[๋‹คํฌ์ดˆ์ฝœ๋ฆฟ ๋ง›๋„๋ฆฌ]

2๏ธโƒฃ HashMap

: ํ‚ค-๊ฐ’(Key-Value) ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • ๊ฐ’์€ ์ค‘๋ณต ๊ฐ€๋Šฅ, ํ‚ค ๊ฐ’์€ ์ค‘๋ณต ๋ถˆ๊ฐ€๋Šฅ!
  • ์ˆœ์„œ๊ฐ€ ์—†๋‹ค

1. ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

์•„๋ž˜์ฒ˜๋Ÿผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค

HashMap<key, value> hashMap = new HashMap<>();

์—ฌ๊ธฐ์„œ < > ์•ˆ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์„ ์ ์„๋•Œ๋Š”
Integer Double String ๋“ฑ๊ณผ ๊ฐ™์ด ํ’€๋„ค์ž„์„ ์ ์–ด์ฃผ์–ด์•ผํ•œ๋‹ค

์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ์กฐํšŒํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด๋ณด์ž

// HashMap ์„ ์–ธ (ํ‚ค์™€ ๊ฐ’์˜ ํƒ€์ž…์„ ์ง€์ •)
HashMap<String, Integer> hashMap = new HashMap<>();

hashMap.put("John", 1030); //put์œผ๋กœ ๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ
hashMap.put("Emily", 1510);
hashMap.put("Minjee", 2758);

System.out.println(hashMap); //hashMap์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ
{John=1030, Minjee=2758, Emily=1510}

์ด๋ ‡๊ฒŒ ์ˆœ์„œ ์—†์ด ์ถœ๋ ฅ๋˜๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ๋‚ด๊ฐ€ Minjee์˜ ์‚ฌ์›๋ฒˆํ˜ธ๋งŒ ์กฐํšŒํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด get(ํ‚ค ๊ฐ’)์„ ์‚ฌ์šฉํ•˜์ž

System.out.println(hashMap.get("Minjee"));  //2758์ถœ๋ ฅ

2. HashMap ํ•จ์ˆ˜

  • get(ํ‚ค๊ฐ’) : value ๊ฐ€์ ธ์˜ค๊ธฐ
  • containsKey() : true / false ์ถœ๋ ฅ -> key ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€
  • containsValue() : true / false ์ถœ๋ ฅ -> value ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€
  • put(key, value) : key, value ์„ธํŠธ ์ €์žฅ
    ๋งŒ์•ฝ ๊ฐ™์€ ํ‚ค๊ฐ’ ๋‹ค์‹œ ์ €์žฅํ•  ์‹œ, ์ƒˆ๋กœ ์ €์žฅํ•œ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ๋จ
  • replace(key,value) : key, value ์„ธํŠธ ๊ฐฑ์‹ 
    +๋งŒ์•ฝ์— ์›๋ž˜ ์—†๋˜ ํ‚ค๊ฐ’์ด๋ฉด, ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜์ง€ ์•Š์Œ. ์›๋ž˜ ์žˆ์—ˆ๋˜ ๊ฐ’๋งŒ ๋ณ€๊ฒฝ
  • putIfAbsent(key,value)
    : ๋งŒ์•ฝ key๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ถ”๊ฐ€ํ•˜๊ณ , ์กด์žฌํ•˜๋ฉด ์ถ”๊ฐ€x๊ฐฑ์‹ x
  • remove(key) : ์ผ์น˜ํ•˜๋Š”๊ฑฐ ์ฐพ์•„์„œ ์‚ญ์ œ

3. ๐Ÿ“Œ LinkedHashMap

HashMap์€ ๋‹ค์ข‹์€๋ฐ... ์ˆœ์„œ๊ฐ€ ์—†์–ด....
์ด๊ฑธ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•! - โœจLinkedHashMapโœจ

๋‚˜๋จธ์ง€๋Š” ๋‹ค ๋˜‘๊ฐ™์€๋ฐ LinkedHashMap๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๊ฐ€ ํ•„์š”ํ•œ ์ฝ”๋”ฉ์— ์ฐฐ๋–ก์ฝฉ๋–ก์ด๋‹ค

4. ๐Ÿ“Œ HashMap์— List ๋„ฃ๊ธฐ

์•„๊นŒ ์œ„์—์„œ HashSet์„ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์ŠคํŠธ ์•ˆ์— ๋ฆฌ์ŠคํŠธ๋ฅผ ๋„ฃ์—ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๋‚ด๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ์ด๋ฆ„๋งŒ๋„ ๋ฝ‘์•„์“ฐ๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์ž๋‚˜์š”?

๊ทผ๋ฐ.. HashSet์€ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ์ด ์•ˆ๋จใ… ใ… 
โ†’ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์„ ์ค˜์•ผ์ง€! โžก๏ธ HashMap

๋˜ ๊ทธ๋ƒฅ HashMap์€ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ์ด ์•ˆ๋ผ...
โ†’ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ๊ฑฐ! โžก๏ธ โœจLinkedHashMapโœจ

(1) key๊ฐ’์„ String, value๋กœ List

MenuCartegory LinkedHashMap ๋งŒ๋“ค์ž

HashMap<String, List<MenuItem4>> MenuCartegory = new LinkedHashMap<>();

(2) ๋ฆฌ์ŠคํŠธ ๋„ฃ๊ธฐ with ์นดํ…Œ๊ณ ๋ฆฌ๋ช…๊ณผ ํ•จ๊ป˜

์ด๋ ‡๊ฒŒ ๊ฐ๊ฐ ์Œ์‹์˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ๋‹ค

//ํ–„๋ฒ„๊ฑฐ ๋ฉ”๋‰ด ๋ฆฌ์ŠคํŠธ
private final List<MenuItem4> Burgers = new ArrayList<>();
//์Œ๋ฃŒ์ˆ˜ ๋ฆฌ์ŠคํŠธ
private final List<MenuItem4> Drinks = new ArrayList<>();
//๋””์ €ํŠธ ๋ฆฌ์ŠคํŠธ
private final List<MenuItem4> Desserts = new ArrayList<>();

์ด ๋ฆฌ์ŠคํŠธ๋ฅผ MenuCartegory์— ๊ฐ๊ฐ Burgers Drinks Desserts๋ฅผ ๋„ฃ์–ด์ค˜๋ณด์ž โžก๏ธ put()์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ฒ ์ฅฌ?

MenuCartegory.put("Burgers", Burgers);
MenuCartegory.put("Drinks", Drinks);
MenuCartegory.put("Desserts", Desserts);

์ด๋ ‡๊ฒŒ ๋„ฃ์–ด์คฌ์œผ๋‹ˆ ์ด์ œ key๊ฐ’์„ ํ†ตํ•ด์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆใ„ท๋‹ค~!!

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