๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java

[JAVA] ์ž๋ฃŒ๊ตฌ์กฐ

by ๋Œ€๋ณต2 2024. 7. 15.

์„ ์š”์•ฝ

๊ตฌ๋ถ„ ์žฅ์  ๋‹จ์ 
๋ฐฐ์—ด - ๋น ๋ฅธ ์ ‘๊ทผ ์†๋„
- ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํšจ์œจ์ 
- ํฌ๊ธฐ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€
- API ๊ธฐ๋Šฅ ๋ถ€์žฌ
์ปฌ๋ ‰์…˜ - ์œ ์—ฐํ•œ ํฌ๊ธฐ ์กฐ์ ˆ
- ํ’๋ถ€ํ•œ API
- ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„์ฒด ์กด์žฌ
- ์˜ค๋ฒ„ํ—ค๋“œ ์กด์žฌ
- ์ œ๋„ค๋ฆญ ์‚ฌ์šฉ ํ•„์š”
- ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

 

 

์ƒํ™ฉ ์ถ”์ฒœ ์ž๋ฃŒ๊ตฌ์กฐ
์š”์†Œ ์ˆ˜๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ๊ณ  ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ ๋ฐฐ์—ด
์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•จ LinkedList, HashMap
๊ฒ€์ƒ‰์ด ๋นˆ๋ฒˆํ•˜๊ณ  ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ํ•„์š” ArrayList
์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ง‘ํ•ฉ์ด ํ•„์š” HashSet, TreeSet
ํ‚ค-๊ฐ’ ๊ตฌ์กฐ์˜ ์ €์žฅ์ด ํ•„์š” HashMap, TreeMap

 

๋ฐฐ์—ด

๊ฐ™์€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์ • ํฌ๊ธฐ ์ž๋ฃŒ ๊ตฌ์กฐ

  • ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ๋น ๋ฅธ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ
  • ๊ธฐ๋ณธํ˜•(int[])๊ณผ ์ฐธ์กฐํ˜•(String[]) ๋ชจ๋‘ ์ง€์›
  • ๋‹ค์ฐจ์› ๋ฐฐ์—ด ์ง€์›
  • ๋‚ด๋ถ€์ ์œผ๋กœ Heap ์˜์—ญ์— ์—ฐ์†๋œ ๊ณต๊ฐ„์„ ํ• ๋‹น(CPU ์บ์‹œ์— ์นœํ™”์ )
int [] arr = new int [5]; 
int [] arr2 = {1,2,3,4,5}; 
System.out.println(Arrays.toString(arr2)); // ์ด๊ฑฐ ํ•˜๋ฉด ํŒŒ์ด์ฌ์—์„œ ํ•œ๋ฒˆ์— ์ถœ๋ ฅํ•˜๋“ฏ์ด ๋‚˜์˜ด 
// ๋‹ค์ฐจ์› ๋ฐฐ์—ด์šฉ์€ 
Arrays.deeptoString(arr); 
int [][] arr3 = new int[3][]; // ์ด๊ฑฐ ๋จ 
arr3[0] = new int[1]; 
arr3[1] = new int[2]; 
arr3[2] = new int[3]; 

for(int [] t : arr3){ 
	System.out.println(t.length); 
}

์ปฌ๋ ‰์…˜

๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅ, ํƒ์ƒ‰, ์ •๋ ฌ, ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•œ ๋™์  ์ž๋ฃŒ๊ตฌ์กฐ๋“ค(java.util์— ์žˆ๋‹ค.)


- ์š”์†Œ์˜ ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ๋™์ 
- ๋ฐ˜๋ณต์ž(Iterator) ๊ธฐ๋ฐ˜ ์ˆœํšŒ ๊ฐ€๋Šฅ
- null ํ—ˆ์šฉ ์—ฌ๋ถ€ ๋ฐ ๋™๊ธฐํ™” ์—ฌ๋ถ€ ๋“ฑ์ด ๊ตฌํ˜„์ฒด ๋งˆ๋‹ค ๋‹ค๋ฆ„

 

List

์ค‘๋ณต๋œ ๊ฐ’์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์ธ๋ฑ์Šค๋กœ ์ฐธ์กฐ ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

add(), get(), set(), remove(), indexOf(), lastIndexOf(), contains() // ๊ณตํ†ต๋ฉ”์„œ๋“œ

 

๐Ÿ”ธ ArrayList

  • ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์ด ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์ž๋™ ๋ฆฌ์‚ฌ์ด์ง•์„ ์ˆ˜ํ–‰
    (add()์‹œ ์šฉ๋Ÿ‰์ด ์ดˆ๊ณผ๋˜๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ grow()๋ฅผ ์‚ฌ์šฉํ•ด ํฌ๊ธฐ๋ฅผ 1.5๋ฐฐ ํ™•์žฅํ•œ๋‹ค)
  • ๋™์‹œ์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”ธ LinkedList

  • ๊ฐ ์š”์†Œ์— ํฌ์ธํ„ฐ๋ฅผ ํฌํ•จํ•ด ๋น„์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋œ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค๋ฅผ ์‚ญ์ œํ•ด๋„ ํ•ด๋‹น ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋Š” ๋น„๊ฒŒ ๋œ๋‹ค.
    (ArrayList์™€ ๋น„๊ตํ•ด ์ธ๋ฑ์Šค๋ฅผ ๋‹น๊ธฐ๋Š” ์—ฐ์‚ฐ์ด ์‚ฌ๋ผ์ ธ ๋น„๊ต์  ๋น ๋ฆ„)
์—ฐ์‚ฐ ArrayList LinkedList
์ธ๋ฑ์Šค ์ ‘๊ทผ O(1) O(n)
์‚ฝ์ž…/์‚ญ์ œ (์ค‘๊ฐ„) O(n) (๋ฐ€์–ด๋‚ด๊ธฐ ๋ฐœ์ƒ) O(1) (๋…ธ๋“œ ์—ฐ๊ฒฐ๋งŒ)
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ ์Œ (๋ฐ์ดํ„ฐ๋งŒ ์ €์žฅ) ๋งŽ์Œ (๋ฐ์ดํ„ฐ + ๋งํฌ)
์บ์‹œ ์ ์ค‘๋ฅ  ๋†’์Œ (์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ) ๋‚ฎ์Œ (๋ถˆ์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ)

๐Ÿ”ธ Vector

  • ArrayList์™€ ๋™์ผํ•˜๋‚˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์— synchronized ์ฒ˜๋ฆฌ(thread-safe)

 

Set

์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์ €์žฅ ์ˆœ์„œ๋ฅผ ๋ฏธ๋ณด์žฅํ•œ๋‹ค.(null๋„ ํ•˜๋‚˜๋งŒ)

๐Ÿ”ธ HashSet

  • ๋‚ด๋ถ€์ ์œผ๋กœ HashMap<K, Object> ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌ
  • hashCode()์™€ equals()๋ฅผ ๋ชจ๋‘ Override ํ•ด์•ผ ์ค‘๋ณต ํŒ๋‹จ์ด ์ •ํ™•
    (equals(): ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฃผ์†Œ๊ฐ’์„ ๋น„๊ต(==), Override๋กœ ๋‚ด์šฉ์„ ๋น„๊ตํ•˜๊ฒŒ ์„ค์ •)
    (hashCode(): ๊ฐ์ฒด๋ฅผ Hash๊ธฐ๋ฐ˜์—์„œ ์‚ฌ์šฉํ•  ๋•Œ, ๋‚ด๋ถ€ ๋ฒ„ํ‚ท์„ ๊ฒฐ์ •ํ•  ๋•Œ ์‚ฌ์šฉ, ๊ฐ™์€ ๊ฐ์ฒด๋Š” ํ•ญ์ƒ ๊ฐ™์€ hashCode()๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ.)
  • Lombok ์‚ฌ์šฉ ์‹œ @EqualsAndHashCode๋กœ ์ž๋™ ์ƒ์„ฑ ๊ฐ€๋Šฅ
class Person {
  String name;
  public Person(String name) { this.name = name; }
}
Set set = new HashSet<>();
set.add(new Person("Alice"));
set.add(new Person("Alice")); // ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ์ธ์‹๋จ

System.out.println(set.size()); // ๊ฒฐ๊ณผ: 2
// ๋‘˜ ๋‹ค ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๊ณ  hashCode๋„ ๋‹ค๋ฅด๊ณ  equals๋„ false: ์ค‘๋ณต ์•„๋‹Œ๊ฑธ๋กœ ์ฒ˜๋ฆฌ
class Person {
    String name;
    public Person(String name) { this.name = name; }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person p = (Person) o;
        return this.name.equals(p.name);
    }

    @Override
    public int hashCode() {
        return name.hashCode(); // String์˜ hashCode ์‚ฌ์šฉ
    }
}


Set<Person> set = new HashSet<>();
set.add(new Person("Alice"));
set.add(new Person("Alice"));

System.out.println(set.size()); // ๊ฒฐ๊ณผ: 1

 

๐Ÿ”ธ TreeSet

  • Red-Black Tree ๊ธฐ๋ฐ˜ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ(BST)
  • Comparable๊ณผ Comparator๋กœ ์ •๋ ฌ ๊ธฐ์ค€ ์ง€์ • ๊ฐ€๋Šฅ
    TreeSet<Integer> ts = new TreeSet<>();
  • ์ •์ˆ˜ํ˜• TreeSet์„ ์ƒ์„ฑํ•œ๋‹ค. ๊ฐ’์ด ์ž๋™์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋œ๋‹ค.
ts.headSet(10);    // 10๋ณด๋‹ค ์ž‘์€ ๊ฐ’
  • 10 ๋ฏธ๋งŒ์˜ ๊ฐ’๋“ค๋งŒ ํฌํ•จํ•œ ๋ทฐ(view)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ฆ‰, ts์—์„œ 10๋ณด๋‹ค ์ž‘์€ ๊ฐ’๋“ค๋งŒ์„ ๊ฐ€์ง„ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ด๋‹ค. (10์€ ํฌํ•จ๋˜์ง€ ์•Š์Œ)
ts.tailSet(10);    // 10๋ณด๋‹ค ํฐ ๊ฐ’
  • 10 ์ด์ƒ์˜ ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ๋ทฐ(view)์ด๋‹ค.
  • ์ฆ‰, ts์—์„œ 10๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ ์ด์ƒ์˜ ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ด๋‹ค. (10์€ ํฌํ•จ๋จ)
ts.subSet(5, 15);  // 5~14 ์‚ฌ์ด ๊ฐ’
  • 5 ์ด์ƒ, 15 ๋ฏธ๋งŒ์˜ ๊ฐ’๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ด๋‹ค.
  • ์ฆ‰, 5 <= ๊ฐ’ < 15 ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์›์†Œ๋“ค๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๊ธฐ๋ณธ ์ •๋ ฌ (Comparable)

TreeSet<Integer> set = new TreeSet<>();
set.add(5);
set.add(3);
set.add(10);

System.out.println(set); // [3, 5, 10] - ์˜ค๋ฆ„์ฐจ์ˆœ ์ž๋™ ์ •๋ ฌ

์‚ฌ์šฉ์ž ์ •์˜ ์ •๋ ฌ (Comparator ์ „๋‹ฌ)

TreeSet<String> names = new TreeSet<>(Comparator.reverseOrder());
names.add("Alice");
names.add("Bob");
names.add("Charlie");

System.out.println(names); // [Charlie, Bob, Alice]

์‚ฌ์šฉ์ž ๊ฐ์ฒด ์ •๋ ฌ (Comparable ๊ตฌํ˜„)

class Person implements Comparable<Person> {
    String name;
    int age;

    public Person(String name, int age) { this.name = name; this.age = age; }

    @Override
    public int compareTo(Person o) {
        return Integer.compare(this.age, o.age);
    }
}

TreeSet<Person> people = new TreeSet<>();
people.add(new Person("Alice", 30));
people.add(new Person("Bob", 20));

 

Stack, Queue, Deque, PriorityQueue

๐Ÿ”ธ Stack (LIFO, ํ›„์ž…์„ ์ถœ)

  • java.util.Stack์€ ์˜ค๋ž˜๋œ ๊ตฌ์กฐ์ด๋ฉฐ, ๋™๊ธฐํ™” ๋น„์šฉ์ด ์žˆ์–ด ์š”์ฆ˜์€ ArrayDeque ๊ถŒ์žฅ
  • ๋ฉ”์„œ๋“œ: push(), pop(), peek()
Deque<String> stack = new ArrayDeque<>();
stack.push("A");
stack.push("B");
System.out.println(stack.pop()); // "B"

 

๐Ÿ”ธ Queue (FIFO, ์„ ์ž…์„ ์ถœ)

  • ์ผ๋ฐ˜์ ์œผ๋กœ LinkedList, ArrayDeque, PriorityQueue ๋“ฑ์„ ์‚ฌ์šฉ
  • ๋ฉ”์„œ๋“œ:
    • offer(e) – ์š”์†Œ ์ถ”๊ฐ€
    • poll() – ๊บผ๋‚ด๊ณ  ์ œ๊ฑฐ (๋น„์–ด์žˆ์œผ๋ฉด null)
    • peek() – ๊บผ๋‚ด์ง€ ์•Š๊ณ  ์กฐํšŒ
Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.offer("B");
System.out.println(queue.poll()); // "A"

 

๐Ÿ”ธ Deque (Double Ended Queue, ์–‘๋ฐฉํ–ฅ ํ)

  • Stack + Queue ํ˜ผํ•ฉํ˜•: ์–‘์ชฝ์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ ๊ฐ€๋Šฅ
  • ์žฅ์ : ๋นˆ๋ฒˆํ•œ ์‚ฝ์ž…/์‚ญ์ œ์— ์ ํ•ฉ (LinkedList๋ณด๋‹ค ๋น ๋ฆ„), ํ/์Šคํƒ ์ „๋ถ€ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  • ๋ฉ”์„œ๋“œ:
    • addFirst(e), addLast(e)
    • removeFirst(), removeLast()
    • peekFirst(), peekLast()
Deque<String> deque = new ArrayDeque<>();
deque.addFirst("A");
deque.addLast("B");
System.out.println(deque.removeLast()); // "B"

 

๐Ÿ”ธ PriorityQueue (์šฐ์„ ์ˆœ์œ„ ํ)

  • ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ •๋ ฌ๋˜์–ด ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ํ
  • ๋‚ด๋ถ€์ ์œผ๋กœ Min-Heap (์ตœ์†Œ ํž™) ๊ตฌ์กฐ ์‚ฌ์šฉ
  • ๊ธฐ๋ณธ ์ •๋ ฌ ๊ธฐ์ค€์€ Comparable.compareTo() ์˜ค๋ฆ„์ฐจ์ˆœ
  • ์ปค์Šคํ…€ ์ •๋ ฌ์€ Comparator ์ „๋‹ฌ๋กœ ๊ฐ€๋Šฅ
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(1);
pq.offer(3);
System.out.println(pq.poll()); // 1 (๊ฐ€์žฅ ์ž‘์€ ๊ฐ’๋ถ€ํ„ฐ)


PriorityQueue<Integer> descPq = new PriorityQueue<>(Comparator.reverseOrder());
descPq.offer(5);
descPq.offer(1);
descPq.offer(3);
System.out.println(descPq.poll()); // 5

 

Map

Map์€ ํ‚ค(key)์™€ ๊ฐ’(value)์˜ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” Java์˜ ์ธํ„ฐํŽ˜์ด์Šค

ํ•˜๋‚˜์˜ ํ‚ค์— ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ๋Œ€์‘๋˜๋ฉฐ, ํ‚ค๋Š” ์ค‘๋ณต๋  ์ˆ˜ ์—†๊ณ  ๊ฐ’์€ ์ค‘๋ณต๋  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ


๐Ÿ”ธ HashMap

  • hashCode() → ๋ฒ„ํ‚ท ์ธ๋ฑ์Šค ๊ฒฐ์ •
  • ์ถฉ๋Œ ์‹œ LinkedList
    (Java 8 ์ดํ›„ TreeNode(Red-Black Tree) ๋กœ ์ „ํ™˜ (์„ฑ๋Šฅ ์ตœ์ ํ™”))
  • key ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ: ํ‰๊ท  O(1), ์ตœ์•… O(n) → TreeNode๋กœ ์™„ํ™”

๐Ÿ”ธ HashTable

  • ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ synchronized → ์„ฑ๋Šฅ ์ด์Šˆ
  • Legacy ํด๋ž˜์Šค → ConcurrentHashMap ๊ถŒ์žฅ

๐Ÿ”ธ LinkedHashMap

  • ๋“ค์–ด์˜จ ์ˆœ์„œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
new LinkedHashMap<>(capacity, loadFactor, accessOrder);

→ accessOrder = true ์„ค์ • ์‹œ, ์ ‘๊ทผ ์ˆœ์„œ ๊ธฐ์ค€์œผ๋กœ ์ˆœ์„œ ๊ฐฑ์‹ 

๐Ÿ”ธ TreeMap

  • NavigableMap ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
  • ๋‚ด๋ถ€๋Š” Red-Black Tree
  • ์ •๋ ฌ ๊ธฐ์ค€: natural order or Comparator

๐Ÿ”ธ ConcurrentHashMap

  • ์„ธ๊ทธ๋จผํŠธ ๊ธฐ๋ฐ˜ ๋ฝ์—์„œ Java 8 ์ดํ›„์—๋Š” CAS("๋‚ด๊ฐ€ ์˜ˆ์ƒํ•œ ๊ฐ’์ผ ๋•Œ๋งŒ ๋ฐ”๊พผ๋‹ค"๋Š” ์กฐ๊ฑด๋ถ€ ๊ฐฑ์‹  ์—ฐ์‚ฐ) + Synchronized ๋ฐฉ์‹ ๋„์ž…
  • ๋™๊ธฐํ™”๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋ถ€๋ถ„ ๋ฝ ๊ตฌ์กฐ

 

์ฃผ ์‚ฌ์šฉ ๋ฉ”์„œ๋“œ

1. put(K key, V value)

ํ‚ค์™€ ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜, ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ๊ฐ’์„ ๋ฎ์–ด์”€

Map<String, Integer> map = new HashMap<>();
map.put("apple", 3);
map.put("banana", 5);

2. get(Object key)

ํ•ด๋‹น ํ‚ค์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ (์—†์œผ๋ฉด null)

System.out.println(map.get("apple")); // 3
System.out.println(map.get("grape")); // null
 

3. containsKey(Object key)

ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ

if (map.containsKey("banana")) {
    System.out.println("๋ฐ”๋‚˜๋‚˜ ์žˆ์Œ");
}

4. containsValue(Object value)

ํ•ด๋‹น ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ

if (map.containsKey("banana")) {
    System.out.println("๋ฐ”๋‚˜๋‚˜ ์žˆ์Œ");
}

5. remove(Object key)

ํŠน์ • ํ‚ค ์ œ๊ฑฐ

map.remove("apple"); // "apple" ์‚ญ์ œ

6. keySet()

๋ชจ๋“  ํ‚ค๋ฅผ Set์œผ๋กœ ๋ฐ˜ํ™˜

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

7. values()

๋ชจ๋“  ๊ฐ’์„ Collection์œผ๋กœ ๋ฐ˜ํ™˜

for (Integer value : map.values()) {
    System.out.println("value: " + value);
}

8. entrySet()

ํ‚ค-๊ฐ’ ์Œ์„ Map.Entry๋กœ ๋ฐ˜ํ™˜ (๋ฐ˜๋ณต๋ฌธ์— ์ž์ฃผ ์‚ฌ์šฉ)

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

9. getOrDefault(K key, V defaultValue)

ํ‚ค๊ฐ€ ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’ ๋ฐ˜ํ™˜

int count = map.getOrDefault("grape", 0); // ์—†์œผ๋ฉด 0 ๋ฐ˜ํ™˜

10. replace(K key, V newValue)

ํ‚ค๊ฐ€ ์กด์žฌํ•  ๋•Œ๋งŒ ๊ฐ’์„ ๊ต์ฒด

map.replace("banana", 10); // banana → 10

11. putIfAbsent(K key, V value)

ํ‚ค๊ฐ€ ์—†์„ ๋•Œ๋งŒ ๊ฐ’์„ ์‚ฝ์ž…
์ฆ‰, ์ด๋ฏธ ํ‚ค๊ฐ€ ์žˆ์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ๊ฐ’์„ ์œ ์ง€

Map<String, Integer> map = new HashMap<>();
map.put("apple", 3);

// ํ‚ค "apple"์ด ์ด๋ฏธ ์žˆ์œผ๋ฏ€๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ
map.putIfAbsent("apple", 10);

// ํ‚ค "banana"๋Š” ์—†์œผ๋ฏ€๋กœ ์ƒˆ๋กœ ์ถ”๊ฐ€๋จ
map.putIfAbsent("banana", 5);

System.out.println(map); // ์ถœ๋ ฅ: {apple=3, banana=5}
 

'Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JAVA] ์ฝ”๋“œ ์™ธ ์ž‘์„ฑํ•  ๊ฒƒ๋“ค  (0) 2024.07.17
[JAVA] ์ƒ์†  (0) 2024.07.17
[JAVA] ๊ฐ์ฒด  (0) 2024.07.16
[JAVA] ๋ณ€์ˆ˜  (0) 2024.07.15
[JAVA] ์ž๋ฐ” ์ž…๋ฌธ  (0) 2024.07.10