개발/Java

Collection(1) - List, Set, Map

daramii 2022. 2. 22. 01:01

 

 

 

μ•ˆλ…•ν•˜μ„Έμš”,

 

μ΄λ²ˆμ—λŠ” μžλ°”μ—μ„œ 자료ꡬ쑰λ₯Ό ν‘œν˜„ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€μΈ μ»¬λ ‰μ…˜(Collection), 그리고 ꡬ체적인 자료ꡬ쑰의 μ’…λ₯˜μΈ 리슀트(List), μŠ€νƒ(Stack) ,큐(Queue),μ…‹(Set),맡(Map)의 κ°œλ…κ³Ό 예제 μ½”λ“œλ₯Ό 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬λž€?


- λ‹€μˆ˜μ˜ 데이터λ₯Ό 닀루기 μœ„ν•œ 자료ꡬ쑰λ₯Ό ν‘œν˜„ν•˜κ³  μ‚¬μš©ν•˜λŠ” 클래슀의 집합을 의미
- 데이터λ₯Ό λ‹€λ£¨λŠ”λ° ν•„μš”ν•œ ν’λΆ€ν•˜κ³  λ‹€μ–‘ν•œ ν΄λž˜μŠ€μ™€ κΈ°λ³Έν•¨μˆ˜λ₯Ό μ œκ³΅ν•˜μ—¬ 유용
- μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ λͺ¨λ“  ν΄λž˜μŠ€λŠ” Collection interfaceλ₯Ό κ΅¬ν˜„(implement)ν•˜λŠ” 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€

 

 

List


μˆœμ„œκ°€ μžˆλŠ” λ‚˜μ—΄λœ 데이터λ₯Ό ν‘œν˜„ν•©λ‹ˆλ‹€.

- ArraylistλŠ” 배열을 μ΄μš©ν•˜μ—¬ 데이터λ₯Ό μ €μž₯ν•˜λŠ” List μΈν„°νŽ˜μ΄μŠ€μž…λ‹ˆλ‹€.

 

//List - μˆœμ„œλ₯Ό μœ μ§€ν•˜κ³ , λ°μ΄ν„°μ˜ 쀑볡을 ν—ˆμš©ν•œλ‹€.
        List<Integer> integerList = new ArrayList<>();
        integerList.add(1);
        integerList.add(5);
        integerList.add(4);
        integerList.add(4);
        integerList.add(11);
        integerList.add(10); // ArrayList에 κ°’ ν•œκ°œμ”© μž…λ ₯
        System.out.println(integerList); // [1,5,4,4,11,10]

        Collections.sort(integerList); // list μ •λ ¬ - μ˜€λ¦„μ°¨μˆœ
        System.out.println(integerList); // [1,4,4,5,10,11]
        System.out.println(integerList.size()); // arrayList의 크기 좜λ ₯
        integerList.remove(4); // 인덱슀λ₯Ό ν™œμš©ν•˜μ—¬ ν•΄λ‹Ήν•˜λŠ” κ°’ 제거
        System.out.println(integerList);
        for (int i = 0; i < integerList.size(); i++) {
            System.out.println(integerList.get(i)); // get을 μ΄μš©ν•˜μ—¬ κ°’ 1κ°œμ”© 좜λ ₯
        }
        for (int current : integerList) {
            System.out.println(current);
        }

 

μœ„μ˜ μ½”λ“œλ₯Ό λ³΄μ‹œλ©΄, μˆœμ„œλŒ€λ‘œ 1,5,4,4,11,10을 λ„£μŠ΅λ‹ˆλ‹€. 좜λ ₯해보면 1,5,4,4,11,10 κ·ΈλŒ€λ‘œ μˆœμ„œλ₯Ό μœ μ§€ν•˜λ©΄μ„œ, 또 쀑볡값인 4λŠ” ν—ˆμš©λ˜μ–΄ λͺ¨λ‘ λ“€μ–΄κ°€λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έ 외에 밑에 뢀뢄은 μ •λ ¬, 크기, 제거, κ°’ 확인에 λŒ€ν•œ ν•¨μˆ˜μ‚¬μš© λΆ€λΆ„μ΄λ‹ˆ 주석을 μ°Έκ³ ν•˜μ—¬ λ³΄μ‹œλ©΄ λ˜κ² μŠ΅λ‹ˆλ‹€ :)

 

 

Set


μˆœμ„œλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠλŠ” λ°μ΄ν„°μ˜ μ§‘합이며 λ°μ΄ν„°μ˜ μ€‘볡을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
- HashSet은 Set μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ λŒ€ν‘œμ μΈ μ»¬λ ‰μ…˜μž…λ‹ˆλ‹€.

 

//Set - μˆœμ„œλ₯Ό μœ μ§€ν•˜μ§€ μ•Šκ³ , λ°μ΄ν„°μ˜ 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
        Set<Integer> integerSet = new HashSet<>();
        integerSet.add(1);
        integerSet.add(1); //쀑볡 μ•ˆλ“€μ–΄κ°.
        integerSet.add(3);
        integerSet.add(2);
        integerSet.add(9);
        integerSet.add(8);
        System.out.println(integerSet); //[1, 2, 3, 8, 9]

        Set<String> stringSet = new HashSet<>();
        stringSet.add("LA");
        stringSet.add("New York");
        stringSet.add("LasVegas");
        stringSet.add("San Francisco");
        stringSet.add("Seoul");
        System.out.println(stringSet);

        stringSet.remove("Seoul");
        System.out.println(stringSet);

        List<String> target = new ArrayList<>();
        target.add("New York");
        target.add("LasVegas");
        stringSet.removeAll(target); //ν•œκΊΌλ²ˆμ— μ§€μš°κΈ° - setνƒ€μž…μ— removeAllν•˜κ³ , Collection νƒ€μž…μ„ λ„£μ–΄μ£Όλ©΄, 그게 μ§€μ›Œμ§„λ‹€.
        System.out.println(stringSet);

        System.out.println("LA ν¬ν•¨λ˜μ–΄ μžˆλ‚˜μš”? " + stringSet.contains("LA")); //true
        System.out.println("Seoul ν¬ν•¨λ˜μ–΄ μžˆλ‚˜μš”? " + stringSet.contains("Seoul")); //false

        System.out.println(stringSet.size());
        stringSet.clear(); //λ‹€μ§€μš°κΈ°
        System.out.println(stringSet);

 

μœ„μ˜ μ½”λ“œμ—μ„œ 보아야 할것은, 1,1,3,2,9,8 μ΄λΌλŠ” 숫자λ₯Ό λ„£μ—ˆμ„λ•Œ, μ€‘λ³΅μˆ«μžμΈ 1은 ν•œλ²ˆλ§Œ λ“€μ–΄κ°€κ³  넣은 숫자의 μˆœμ„œλŒ€λ‘œ λ‚˜μ˜€μ§€ μ•ŠλŠ” λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·Έ μ•„λž˜ 뢀뢄은 λΆ€λΆ„μ œκ±°, μ—¬λŸ¬κ°œ ν•œκΊΌλ²ˆμ— 제거, κ°’ 포함여뢀 확인, λͺ¨λ‘ μ œκ±°μ— λŒ€ν•œ ν•¨μˆ˜ μ‚¬μš©μž…λ‹ˆλ‹€. 주석을 μ°Έκ³ ν•˜μ—¬ ν™•μΈν•΄μ£Όμ„Έμš” :)

 

 

Map


- HashMap은 ν‚€(key)와 κ°’(value)을 ν•˜λ‚˜μ˜ λ°μ΄ν„°λ‘œ μ €μž₯ν•˜λŠ” νŠΉμ§•μ„ κ°€μ§‘λ‹ˆλ‹€. 이λ₯Ό ν†΅ν•˜μ—¬ ν•΄μ‹±(hashing)을 κ°€λŠ₯ν•˜κ²Œ ν•˜μ—¬ 데이터λ₯Ό κ²€μƒ‰ν•˜λŠ”데 λ›°μ–΄λ‚œ μ„±λŠ₯을 λ³΄μž…λ‹ˆλ‹€.

 

//Map --> Key, Valueλ₯Ό 가진닀.
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "apple");
        map.put(2, "berry");
        map.put(3, "cherry");
        System.out.println(map);
        System.out.println("1st in map: " + map.get(1)); //1μ΄λΌλŠ” key에 λŒ€ν•œ 값을 κ°€μ Έμ˜€κΈ°
        map.remove(2); //λΆ€λΆ„ 제거
        System.out.println(map);
        System.out.println(map.containsKey(2)); //ν‚€ 포함여뢀
        System.out.println(map.containsValue("cherry")); //κ°’ 포함여뢀
        map.clear(); //λͺ¨λ‘ 제거
        System.out.println(map);

 

μœ„μ˜ μ½”λ“œλ₯Ό λ³΄μ‹œλ©΄, Integer(Keyνƒ€μž…), String(Valueνƒ€μž…)으둜 Key와 Value의 νƒ€μž…μ„ μ§€μ •ν•œ λ’€, λ‹€λ₯Έ κ²ƒκ³ΌλŠ” λ‹€λ₯΄κ²Œ put을 μ΄μš©ν•˜μ—¬ (key, value)λ₯Ό λ„£μ–΄μ£Όκ³  μžˆμŠ΅λ‹ˆλ‹€. 값을 κΊΌλ‚΄κ³  μ‹Άμ„λ•ŒλŠ” get(keyκ°’)을 ν†΅ν•΄μ„œ κ°€μ Έμ˜€κ³  μžˆλ„€μš”. κ·Έ μ•„λž˜μ—λŠ” 제거, key와 value의 포함여뢀, μΌκ΄„μ œκ±°μ— λŒ€ν•œ ν•¨μˆ˜μž…λ‹ˆλ‹€.  

 

 

정리


Collection 은 λͺ¨λ“  μžλ£Œκ΅¬μ‘°κ°€ κ΅¬ν˜„(implement)ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€μž…λ‹ˆλ‹€. 였늘 배운 λͺ¨λ“  μžλ£Œκ΅¬μ‘°μ— ν•΄λ‹Ήν•˜λŠ” 클래슀, μΈν„°νŽ˜μ΄μŠ€λŠ” μ–Έμ œλ‚˜ Collection μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

List : μˆœμ„œκ°€ μžˆλŠ” λ°μ΄ν„°μ˜ 집합이며 λ°μ΄ν„°μ˜ 쀑볡을 ν—ˆμš©ν•©λ‹ˆλ‹€.
→ ArrayList, LinkedList, Stack λ“±
Set : μˆœμ„œλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠλŠ” λ°μ΄ν„°μ˜ 집합이며 λ°μ΄ν„°μ˜ 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
→ HashSet, TreeSet λ“±
Map : ν‚€(key)와 κ°’(value)의 쌍으둜 이루어진 λ°μ΄ν„°μ˜ μ§‘ν•©μž…λ‹ˆλ‹€. μˆœμ„œλŠ” μœ μ§€λ˜μ§€ μ•ŠμœΌλ©° ν‚€λŠ” 쀑볡을 ν—ˆμš©λ˜μ§€ μ•Šκ³  값은 쀑볡을 ν—ˆμš©ν•©λ‹ˆλ‹€.
→ HashMap, TreeMap λ“±


μ»¬λ ‰μ…˜ μΈν„°νŽ˜μ΄μŠ€μ—λŠ” μ»¬λ ‰μ…˜ ν΄λž˜μŠ€μ— μ €μž₯된 데이터λ₯Ό 읽고, μΆ”κ°€ν•˜κ³  μ‚­μ œν•˜λŠ” λ“± 데이터λ₯Ό λ‹€λ£¨λŠ”λ° 기본적인 λ©”μ†Œλ“œλ“€μ„ μ •μ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 

 

 

 

λ‹€μŒ 글에 μ΄μ–΄μ„œ μŠ€νƒκ³Ό 큐에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€ :)