๐Ÿฏ[TIL] 250618-013

byoยท2025๋…„ 6์›” 18์ผ

๐Ÿ’ซ JAVA

โœ”๏ธ List

โœ… ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ž€?

  • ์ž๋ฐ”์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ํด๋ž˜์Šค ์ง‘ํ•ฉ
  • List, Set, Map ๋“ฑ ๋‹ค์–‘ํ•œ ์ปฌ๋ ‰์…˜ ํฌํ•จ
  • ์ง์ ‘ ๊ตฌํ˜„ํ•  ํ•„์š” ์—†์ด ๊ฐ€์ ธ๋‹ค ์“ฐ๊ธฐ๋งŒ ํ•˜๋ฉด ๋จ

โœ… List๋ž€?

  • ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ
  • ์ค‘๋ณต ํ—ˆ์šฉ
  • ๋Œ€ํ‘œ ๊ตฌํ˜„์ฒด: ArrayList, LinkedList

โœ๏ธ ArrayList ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”

  • ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ List ์ƒ์„ฑ
  • import java.util.* ํ•„์š”
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
    }
}

โœ… add() ๋ฉ”์„œ๋“œ๋กœ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

  • ๋ฆฌ์ŠคํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ถ”๊ฐ€
  • add() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
public class Main {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<String>();
        fruits.add("apple");
        fruits.add("banana");
        fruits.add("cherry");
        fruits.add("dragonfruit");
        fruits.add("mango");
        }
    }
}

โœ๏ธ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ถœ๋ ฅ

  • for๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ
  • get(i) ๋ฉ”์„œ๋“œ๋กœ ๊ฐ ์š”์†Œ์— ์ ‘๊ทผ
public class Main {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<String>();
        fruits.add("apple");
        fruits.add("banana");
        fruits.add("cherry");
        fruits.add("dragonfruit");
        fruits.add("mango");
        for(int i = 0; i < fruits.size(); i++){
            System.out.println(fruits.get(i));
        }
    }
}
โ–ถ๏ธ
apple
banana
cherry
dragonfruit
mango

โœ๏ธ for-each๋ฌธ์œผ๋กœ ์ถœ๋ ฅ

  • for-each๋ฌธ์„ ์ด์šฉํ•˜๋ฉด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ˆœํšŒ ๊ฐ€๋Šฅ
  • ๊ฐ ์š”์†Œ๋ฅผ ์ง์ ‘ ๋ณ€์ˆ˜์— ๋‹ด์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
public class Main {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<String>();
        fruits.add("apple");
        fruits.add("banana");
        fruits.add("cherry");
        fruits.add("dragonfruit");
        fruits.add("mango");
        for(String fruit : fruits){
            System.out.println(fruit);
        }
    }
}
โ–ถ๏ธ
apple
banana
cherry
dragonfruit
mango

โ„น๏ธ Iterator

Iterator<String> it = fruits.iterator();
while (it.hasNext()) {
    String item = it.next();
    System.out.println(item);
}

โœ… List ์ •๋ ฌํ•˜๊ธฐ

  • Collections.sort() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌ์ŠคํŠธ ์š”์†Œ๋ฅผ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Œ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋จ
Collections.sort(fruits);

โœ… List์— ํŠน์ • ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธ

  • contains() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌ์ŠคํŠธ์— ํŠน์ • ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅ
  • ๊ฒฐ๊ณผ๋Š” true ๋˜๋Š” false๋กœ ๋ฐ˜ํ™˜
if(fruits.contains("apple")){
    System.out.println("apple์€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.");
}

โœ…List ์š”์†Œ ์‚ญ์ œํ•˜๊ธฐ

  • remove() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๊ฐ’์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Œ
  • ๊ฐ’์œผ๋กœ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ธ๋ฑ์Šค๋กœ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Œ
public class Main {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<String>();
        fruits.add("mango");
        fruits.add("apple");
        fruits.add("dragonfruit");
        fruits.add("cherry");
        fruits.add("banana");
        
        fruits.remove("apple");
        fruits.remove(0);
        System.out.println(fruits);
    }
}
โ–ถ๏ธ
[cherry, dragonfruit, mango]

โœ… List ์ „์ฒด ๋น„์šฐ๊ธฐ

  • clear() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์ œ๊ฑฐ๋จ
  • ๋ฆฌ์ŠคํŠธ๋Š” ๋น„์–ด ์žˆ์ง€๋งŒ null์ด ์•„๋‹Œ ์ƒํƒœ๋กœ ๋‚จ์Œ
fruits.clear();
System.out.println(fruits); // ์ถœ๋ ฅ: []

โœ… List๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ

  • isEmpty() ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉ
  • ๋น„์–ด ์žˆ์œผ๋ฉด true, ์š”์†Œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด false ๋ฐ˜ํ™˜
if (fruits.isEmpty()) {
    System.out.println("๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.");
} else {
    System.out.println("๋ฆฌ์ŠคํŠธ์— ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.");
}

โœ… List ํฌ๊ธฐ ํ™•์ธ

  • size() ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌ์ŠคํŠธ์— ๋ช‡ ๊ฐœ์˜ ์š”์†Œ๊ฐ€ ๋“ค์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉ
  • ๋ฐ˜ํ™˜๊ฐ’์€ ์ •์ˆ˜(int)
System.out.println("๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ: " + fruits.size());

โœ… List ํ™œ์šฉ ๋ฉ”์„œ๋“œ

  • indexOf(): ํŠน์ • ๊ฐ’์˜ ์œ„์น˜(์ธ๋ฑ์Šค)๋ฅผ ๋ฐ˜ํ™˜ํ•จ. ์—†์œผ๋ฉด -1
  • set(): ํŠน์ • ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ์ˆ˜์ •ํ•จ
  • subList(): ๋ฆฌ์ŠคํŠธ์˜ ์ผ๋ถ€๋ฅผ ์ž˜๋ผ์„œ ์ƒˆ ๋ฆฌ์ŠคํŠธ์ฒ˜๋Ÿผ ๋ฐ˜ํ™˜ํ•จ
int index = fruits.indexOf("mango"); // ์žˆ์œผ๋ฉด ์ธ๋ฑ์Šค, ์—†์œผ๋ฉด -1 ์ถœ๋ ฅ

fruits.set(1, "Orange"); // 1๋ฒˆ ์ธ๋ฑ์Šค ๊ฐ’์„ "Orange"๋กœ ์ˆ˜์ •

List<String> sliced = fruits.subList(0, 2); // 0๋ฒˆ๋ถ€ํ„ฐ 1๋ฒˆ๊นŒ์ง€ ์ถ”์ถœ (2๋Š” ๋ฏธํฌํ•จ)

โ„น๏ธ List vs ArrayList

  • ArrayList๋Š” List์˜ ๊ตฌํ˜„์ฒด
  • ๋ณ€์ˆ˜๋Š” List๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ์—ฐํ•จ
  • LinkedList๋กœ๋„ ์‰ฝ๊ฒŒ ๊ต์ฒด ๊ฐ€๋Šฅ

๐Ÿ” List ํ•ต์‹ฌ ์š”์•ฝ ์ •๋ฆฌ

ํ•ญ๋ชฉ์„ค๋ช…
์ž๋ฃŒ ๊ตฌ์กฐ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋Š” ์ปฌ๋ ‰์…˜
๋Œ€ํ‘œ ๊ตฌํ˜„์ฒดArrayList, LinkedList
๋ฐ์ดํ„ฐ ์ถ”๊ฐ€add()
๋ฐ์ดํ„ฐ ์‚ญ์ œremove(), clear()
๊ฐ’ ํ™•์ธcontains(), indexOf()
์ „์ฒด ํƒ์ƒ‰for๋ฌธ, for-each๋ฌธ
์ •๋ ฌCollections.sort()
์ƒํƒœ ํ™•์ธsize(), isEmpty()

โ„น๏ธ ์ž๋ฐ”์—์„œ List ์ƒ์„ฑํ•˜๋Š”๋ฒ•

๐Ÿ”ธ1. new ArrayList<>()

  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๊ณ  ์ˆ˜์ • ๊ฐ€๋Šฅ
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");

๐Ÿ”ธ2. Arrays.asList(...)

  • ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ดˆ๊ธฐ๊ฐ’์„ ์ฑ„์›Œ ์ƒ์„ฑ
  • add/remove ๋ถˆ๊ฐ€, set ๊ฐ€๋Šฅ
List<String> list = Arrays.asList("apple", "banana");

java.util.Arrays class asList(...) method

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a); // ์ƒˆ๋กœ์šด ArrayList ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
}

๐Ÿ”ธ3. List.of(...)

  • add/remove/set ๋ถˆ๊ฐ€
List<Integer> numbers = List.of(1, 2, 3, 4, 5);

java.util.List interface of(...) method

static <E> List<E> of() {
    return (List<E>) ImmutableCollections.EMPTY_LIST; // ๋ถˆ๋ณ€ ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜.
}

๐Ÿ”ธ4. new ArrayList<>(List.of(...))

  • List.of()๋กœ ์ดˆ๊ธฐํ™”, ArrayList๋กœ ๊ฐ์‹ธ์„œ ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
  • ์‹ค๋ฌด์—์„œ ์ž์ฃผ ์“ฐ๋Š” ๋ฐฉ์‹ (์ดˆ๊ธฐ๊ฐ’/์ˆ˜์ • ok)
List<String> list = new ArrayList<>(List.of("apple", "banana"));
list.add("cherry"); // โœ… OK

๐Ÿ”ธ5. Collections.nCopies(n, value)

  • n๊ฐœ์˜ ๋™์ผํ•œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”
List<String> list = new ArrayList<>(Collections.nCopies(5, "apple"));
// [apple, apple, apple, apple, apple]

๐Ÿ”ธ6. Stream + Collectors.toList()

  • Stream ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ์œผ๋กœ ๊ฐ€๊ณต, ํ•„ํ„ฐ๋ง ๊ฐ€๋Šฅ
List<Integer> list = IntStream.rangeClosed(1, 5)
                              .boxed()
                              .collect(Collectors.toList());
// [1, 2, 3, 4, 5]

๐Ÿ’ก(์ฐธ๊ณ ) Arrays.asList() ์™€ List.of() ์ฐจ์ด ์ถœ์ฒ˜: [Inpa Dev ๐Ÿ‘จโ€๐Ÿ’ป:ํ‹ฐ์Šคํ† ๋ฆฌ]


โœ”๏ธ Set

โœ… Set์ด๋ž€?

  • ์š”์†Œ์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ค‘๋ณต๋œ ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • HashSet, LinkedHashSet, TreeSet ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ธ Set ๊ตฌํ˜„์ฒด
  • List์™€๋Š” ๋‹ฌ๋ฆฌ, ๊ฐ™์€ ๊ฐ’์„ ๋‘ ๋ฒˆ ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ด ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์ž…๋‹ˆ๋‹ค.

โœ… HashSet ์ƒ์„ฑ

  • ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ Set ์ƒ์„ฑ
  • import java.util.* ํ•„์š”
import java.util.*;

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

โœ… add() ๋ฉ”์„œ๋“œ๋กœ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

  • Set์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ add() ์‚ฌ์šฉ
  • ์ค‘๋ณต๋œ ๊ฐ’์€ ๋ฌด์‹œ๋จ
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Apple"); // ์ค‘๋ณต ์ถ”๊ฐ€ ๋ฌด์‹œ

โœ… for-each๋ฌธ์œผ๋กœ ์ˆœํšŒ

  • Set์€ ์ˆœ์„œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ ๋ถˆ๊ฐ€
  • for-each๋ฌธ์„ ํ†ตํ•ด ์ „์ฒด ์ˆœํšŒ ๊ฐ€๋Šฅ
for (String fruit : fruits) {
    System.out.println(fruit);
}

โœ๏ธ List์™€์˜ ๋น„๊ต ์‹ค์Šต

  • ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ List์™€ Set์— ๋„ฃ๊ณ  ์ฐจ์ด ํ™•์ธ
  • List๋Š” ์ค‘๋ณต ํ—ˆ์šฉ, Set์€ ์ค‘๋ณต ์ œ๊ฑฐ
List<String> list = new ArrayList<>();
Set<String> set = new HashSet<>();

list.add("Apple");
list.add("Apple");
set.add("Apple");
set.add("Apple");

System.out.println(list); // [Apple, Apple]
System.out.println(set);  // [Apple]

โœ๏ธ Hash ๊ฐ’ ํ™•์ธ ์‹ค์Šต

  • HashSet์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ ์š”์†Œ์˜ hashCode() ๊ฐ’์„ ์ด์šฉํ•ด ์ €์žฅ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค
  • ๋ฌธ์ž์—ด์˜ hashCode๋Š” ๊ฐ์ฒด๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ์ €์žฅ ์œ„์น˜๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค

์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋ฌธ์ž์—ด ๋‘ ๊ฐœ์˜ ํ•ด์‹œ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

String a = "Apple";
String b = "Banana";

System.out.println(a.hashCode());
System.out.println(b.hashCode());

โœ… LinkedHashSet์ด๋ž€?

  • LinkedHashSet์€ HashSet๊ณผ ๋™์ผํ•˜๊ฒŒ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ, ์ž…๋ ฅ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ LinkedList ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด ์š”์†Œ์˜ ์‚ฝ์ž… ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค.
  • ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋˜๋ฉด์„œ๋„ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
Set<String> linkedSet = new LinkedHashSet<>();
linkedSet.add("Banana");
linkedSet.add("Apple");
linkedSet.add("Cherry");

System.out.println(linkedSet); // [Banana, Apple, Cherry]

โœ… TreeSet์ด๋ž€?

  • TreeSet์€ ์š”์†Œ๋ฅผ ์ž๋™์œผ๋กœ ์ •๋ ฌํ•˜๋Š” Set์ž…๋‹ˆ๋‹ค.
  • ์ค‘๋ณต๋œ ๊ฐ’์€ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ •๋ ฌ ๊ธฐ์ค€์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์ž…๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ (Red-Black Tree) ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์„ฑ๋Šฅ์€ HashSet๋ณด๋‹ค ๋А๋ฆฌ์ง€๋งŒ, ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
Set<String> treeSet = new TreeSet<>();
treeSet.add("Banana");
treeSet.add("Apple");
treeSet.add("Cherry");

System.out.println(treeSet); // [Apple, Banana, Cherry]

โ†”๏ธ HashSet vs LinkedHashSet vs TreeSet

๊ตฌ๋ถ„HashSetLinkedHashSetTreeSet
์ค‘๋ณต ํ—ˆ์šฉโŒ ์—†์ŒโŒ ์—†์ŒโŒ ์—†์Œ
์ˆœ์„œ ์œ ์ง€โŒ ์—†์Œ (๋ฌด์ž‘์œ„)โœ… ์ž…๋ ฅ ์ˆœ์„œ ์œ ์ง€โœ… ์ •๋ ฌ๋œ ์ˆœ์„œ ์œ ์ง€
์ •๋ ฌโŒ ์—†์Œ โŒ ์—†์Œโœ… ์ž๋™ ์ •๋ ฌ (์ž์—ฐ ์ˆœ์„œ ๋˜๋Š” Comparator)
์†๋„ ํŠน์ง•๊ฐ€์žฅ ๋น ๋ฆ„ (O(1))์ค‘๊ฐ„ (์ˆœ์„œ ์ฒ˜๋ฆฌ ํฌํ•จ)๊ฐ€์žฅ ๋А๋ฆผ (์ •๋ ฌ ๋น„์šฉ)
์‚ฌ์šฉ ๋ชฉ์ ๋น ๋ฅธ ์‚ฝ์ž…/๊ฒ€์ƒ‰์ˆœ์„œ + ์ค‘๋ณต ์ œ๊ฑฐ์ •๋ ฌ + ์ค‘๋ณต ์ œ๊ฑฐ

๐Ÿ” Set ํ•ต์‹ฌ ์š”์•ฝ ์ •๋ฆฌ

ํ•ญ๋ชฉ์„ค๋ช…
์ž๋ฃŒ ๊ตฌ์กฐ์ˆœ์„œ ์—†์ด ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ปฌ๋ ‰์…˜
๋Œ€ํ‘œ ๊ตฌํ˜„์ฒดHashSet, LinkedHashSet, TreeSet
์ค‘๋ณต ์—ฌ๋ถ€์ค‘๋ณต ํ—ˆ์šฉ โŒ
์ˆœ์„œ ๋ณด์กดHashSet โŒ, LinkedHashSet โœ…, TreeSet โœ…(์ •๋ ฌ)
์ •๋ ฌ ์ง€์›TreeSet๋งŒ ์ž๋™ ์ •๋ ฌ (์˜ค๋ฆ„์ฐจ์ˆœ)
๋ฐ์ดํ„ฐ ์ถ”๊ฐ€add()
๋ฐ์ดํ„ฐ ์ œ๊ฑฐremove(), clear()
๊ฐ’ ํ™•์ธcontains()
์ „์ฒด ํƒ์ƒ‰for-each๋ฌธ ์‚ฌ์šฉ ๊ถŒ์žฅ

โœ”๏ธ Map

โœ… Map์ด๋ž€?

  • ํ‚ค(Key)์™€ ๊ฐ’(Value)์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ตฌ์กฐ
  • ํ‚ค๋Š” ์ค‘๋ณต ๋ถˆ๊ฐ€, ๊ฐ’์€ ์ค‘๋ณต ๊ฐ€๋Šฅ
  • ๋น ๋ฅธ ํƒ์ƒ‰๊ณผ ์ˆ˜์ •์ด ํŠน์ง•

โœ… Map ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”

  • Map์€ ์ธํ„ฐํŽ˜์ด์Šค, HashMap์€ ๊ตฌํ˜„์ฒด
  • ์ œ๋„ค๋ฆญ์€ <Key, Value> ํ˜•ํƒœ
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> fruitPrices = new HashMap<>();
    }
}

โœ… put()์œผ๋กœ ๊ฐ’ ์ถ”๊ฐ€

  • Map์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” put(key, value) ์‚ฌ์šฉ
  • ํ‚ค๊ฐ€ ์ค‘๋ณต๋˜๋ฉด ๊ธฐ์กด ๊ฐ’์ด ๋ฎ์–ด์“ฐ๊ธฐ๋จ
fruitPrices.put("Apple", 150);
fruitPrices.put("Banana", 50);
fruitPrices.put("Cherry", 200);

โœ… entrySet()์œผ๋กœ ์ „์ฒด ์ˆœํšŒ

  • Map ์ „์ฒด๋ฅผ ์ˆœํšŒํ•˜๋ ค๋ฉด entrySet() ์‚ฌ์šฉ
  • ๊ฐ ํ•ญ๋ชฉ์€ Map.Entry ๊ฐ์ฒด๋กœ ๋ฐ›์•„์˜ด
for (Map.Entry<String, Integer> entry : fruitPrices.entrySet()) {
    System.out.println(entry.getKey() + " costs " + entry.getValue() + " cents.");
}

โœ… values() + size()๋กœ ํ‰๊ท  ๊ณ„์‚ฐ

  • Map์˜ ๋ชจ๋“  ๊ฐ’์„ ๊บผ๋‚ผ ๋•Œ values() ์‚ฌ์šฉ
  • ์š”์†Œ ๊ฐœ์ˆ˜๋Š” size()๋กœ ํ™•์ธ
int sum = 0;
for (int score : studentScores.values()) {
    sum += score;
}
double average = (double) sum / studentScores.size();
System.out.println("Average score: " + average);

โœ… containsKey() & containsValue()

  • containsKey(key)๋Š” ํ•ด๋‹น ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • containsValue(value)๋Š” ํ•ด๋‹น ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋‘˜ ๋‹ค boolean ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์กฐ๊ฑด๋ฌธ์— ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
Map<String, Integer> fruitPrices = new HashMap<>();
fruitPrices.put("Apple", 150);
fruitPrices.put("Banana", 50);

System.out.println(fruitPrices.containsKey("Apple"));   // true
System.out.println(fruitPrices.containsKey("Grapes"));  // false
System.out.println(fruitPrices.containsValue(50));       // true
System.out.println(fruitPrices.containsValue(300));      // false

โœ… getOrDefault() ์‹ค์Šต

  • getOrDefault(key, defaultValue)๋Š” ํ•ด๋‹น ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋ฉด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด๋ฌธ ์—†์ด๋„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ’์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด NullPointerException ๋ฐฉ์ง€์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
Map<String, Integer> fruitPrices = new HashMap<>();
fruitPrices.put("Apple", 150);
fruitPrices.put("Banana", 50);

System.out.println(fruitPrices.getOrDefault("Apple", 0));   // 150
System.out.println(fruitPrices.getOrDefault("Grapes", 0));  // 0 (๊ธฐ๋ณธ๊ฐ’)

โœ… replace() & remove() ์‹ค์Šต

  • replace(key, newValue)๋Š” ๊ธฐ์กด ํ‚ค์˜ ๊ฐ’์„ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • remove(key)๋Š” ํ•ด๋‹น ํ‚ค์™€ ๊ทธ์— ์—ฐ๊ฒฐ๋œ ๊ฐ’์„ Map์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋‘ ๋ฉ”์„œ๋“œ ๋ชจ๋‘ ํ‚ค๊ฐ€ ์—†์œผ๋ฉด ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Map<String, Integer> fruitPrices = new HashMap<>();
fruitPrices.put("Apple", 150);
fruitPrices.put("Banana", 50);

fruitPrices.replace("Apple", 180); // Apple ๊ฐ€๊ฒฉ์„ 180์œผ๋กœ ๋ณ€๊ฒฝ
fruitPrices.remove("Banana");      // Banana ํ•ญ๋ชฉ ์‚ญ์ œ

System.out.println(fruitPrices); // ์ถœ๋ ฅ: {Apple=180}

โœ… keySet()์œผ๋กœ ํ‚ค๋งŒ ์ถœ๋ ฅํ•˜๊ธฐ

  • keySet() ๋ฉ”์„œ๋“œ๋Š” Map์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ํ‚ค(Set ํ˜•ํƒœ) ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด key๋งŒ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜, key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Map<String, Integer> fruitPrices = new HashMap<>();
fruitPrices.put("Apple", 150);
fruitPrices.put("Banana", 50);
fruitPrices.put("Cherry", 200);

for (String key : fruitPrices.keySet()) {
    System.out.println("Key: " + key);
}

โœ… TreeMap ์†Œ๊ฐœ ๋ฐ ์ •๋ ฌ๋œ ์ถœ๋ ฅ

  • TreeMap์€ ํ‚ค๋ฅผ ์ž๋™์œผ๋กœ ์ •๋ ฌ๋œ ์ˆœ์„œ๋กœ ์ €์žฅํ•˜๋Š” Map ๊ตฌํ˜„์ฒด์ž…๋‹ˆ๋‹ค.
  • ํ‚ค์˜ ์ž์—ฐ ์ˆœ์„œ(์˜ˆ: ์ˆซ์ž ์˜ค๋ฆ„์ฐจ์ˆœ, ๋ฌธ์ž์—ด ์•ŒํŒŒ๋ฒณ ์ˆœ) ๋˜๋Š” Comparator ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
  • ํ‚ค์˜ ์ •๋ ฌ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ HashMap ๋Œ€์‹  TreeMap์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Map<String, Integer> fruitPrices = new TreeMap<>();
fruitPrices.put("Banana", 50);
fruitPrices.put("Apple", 150);
fruitPrices.put("Cherry", 200);

for (Map.Entry<String, Integer> entry : fruitPrices.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

๐Ÿ” Map ํ•ต์‹ฌ ์š”์•ฝ ์ •๋ฆฌ

ํ•ญ๋ชฉ์„ค๋ช…
์ž๋ฃŒ ๊ตฌ์กฐํ‚ค(Key)์™€ ๊ฐ’(Value) ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ปฌ๋ ‰์…˜
๋Œ€ํ‘œ ๊ตฌํ˜„์ฒดHashMap, TreeMap, LinkedHashMap
ํ‚ค ์ค‘๋ณต ์—ฌ๋ถ€์ค‘๋ณต ํ—ˆ์šฉ โŒ (๊ณ ์œ ํ•ด์•ผ ํ•จ)
๊ฐ’ ์ค‘๋ณต ์—ฌ๋ถ€์ค‘๋ณต ํ—ˆ์šฉ โœ…
์ •๋ ฌ ์ง€์›TreeMap์€ ํ‚ค ๊ธฐ์ค€ ์ž๋™ ์ •๋ ฌ
๋ฐ์ดํ„ฐ ์ถ”๊ฐ€put(key, value)
๋ฐ์ดํ„ฐ ์กฐํšŒget(key), getOrDefault(key, ๊ธฐ๋ณธ๊ฐ’)
๊ฐ’ ์ˆ˜์ •replace(key, newValue)
ํ•ญ๋ชฉ ์‚ญ์ œremove(key)
ํ‚ค ํ™•์ธcontainsKey(key)
๊ฐ’ ํ™•์ธcontainsValue(value)
์ „์ฒด ํƒ์ƒ‰entrySet(), keySet(), values() ํ™œ์šฉ
profile
๐Ÿ—‚๏ธ hamstern

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