[Java] ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ์ •๋ฆฌ: List, Set, Map ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋Œ€ํ‘œ ๊ตฌํ˜„์ฒด ์ด์ •๋ฆฌ

2025. 5. 30. 19:53ยท๐Ÿ› ๏ธBackend/โ˜•Java

โœ… 1. ์ปฌ๋ ‰์…˜(Collection)์ด๋ž€?

  • Collection ์ž์ฒด๋Š” ์˜์–ด๋กœ "์ˆ˜์ง‘๋œ ๊ฒƒ, ๋ชจ์Œ"์„ ์˜๋ฏธํ•˜๋ฉฐ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ „๋ฐ˜์—์„œ ๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ์„ ํ‘œํ˜„ํ•  ๋•Œ ์ž์ฃผ ์“ฐ์ธ๋‹ค.
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„  ์—ฌ๋Ÿฌ ์›์†Œ๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ๊ด€๋ฆฌ(๊ฒ€์ƒ‰, ์ •๋ ฌ, ์‚ญ์ œ ๋“ฑ) ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋“ค์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์ž๋ฐ”์—์„  JCF(Java Collections Framework)๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ์ธํ„ฐํŽ˜์ด์Šค์™€ ํด๋ž˜์Šค๋กœ ํ•ด๋‹น ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • ์ž๋ฐ” ์ปฌ๋ ‰์…˜์˜ ์ฃผ์š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋Š” Collection, List, Set, Queue, Map ์ด ์žˆ๋‹ค

โœ… 2. JCF(Java Collections Framework) ๊ตฌ์กฐ

 

(1) JCF(Java Collections Framework) ์ธํ„ฐํŽ˜์ด์Šค

Set: ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๊ฐ€ ์—†๊ณ , ์ค‘๋ณต ๋ฐ์ดํ„ฐ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ( ์ฐธ๊ณ : ๋‚ด๋ถ€์ ์œผ๋กœ Map์„ ์ด์šฉํ•จ )
List: ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๊ณ  ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
Queue: List์™€ ์œ ์‚ฌํ•˜๋‚˜ ์›์†Œ์˜ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ FIFO ๋ฐฉ์‹
Map: ์›์†Œ๊ฐ€ <key, value>์˜ ํ˜•ํƒœ์ด๋ฉฐ ์ˆœ์„œ๊ฐ€ ์—†์œผ๋ฉฐ, ํ‚ค๊ฐ’์€ ์ค‘๋ณต์ด ๋˜์ง€์•Š์ง€๋งŒ value๋Š” ์ค‘๋ณต์ด ๋  ์ˆ˜ ์žˆ์Œ.

 

(2) Map ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋”ฐ๋กœ ์žˆ๋Š”๋ฐ ์ปฌ๋ ‰์…˜์— ํฌํ•จ๋˜๋Š” ์ด์œ 

  • Collection์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. ex) add(E e) / remove(E e)
  • Ma์€ ํ‚ค-๊ฐ’ ์Œ(key-value)์„ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. ex) put(K, V), get(K) ๋“ฑ
  • ์ฆ‰, ๊ตฌ์กฐ์ ์œผ๋กœ ์˜๋ฏธ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ณตํ•˜์ง€ ์•Š์•„, Collection๊ณผ ๋–จ์–ด์ ธ ์žˆ๋Š” ๊ตฌ์กฐ์ด๋‹ค.
  • ์ž๋ฐ” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ฉ๋œ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ์ „์ฒด ์ฒด๊ณ„๋ฅผ ์˜๋ฏธํ•จ.
  • ์ฆ‰, Collection ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์„ ์˜๋ฏธํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ Map ๋˜ํ•œ ์ž๋ฐ” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ.
  • ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชฉ์ ์€ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ ˆ์ž„์›Œํฌ์— ์†ํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
  • ๊ณต์‹๋ฌธ์„œ์—์„œ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ฉ๋œ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ์ „์ฒด ์ฒด๊ณ„๋ผ๊ณ  ๋ง์„ ํ•˜๊ณ  ์žˆ์Œ.

โœ… 3. Iterable & Iterator & ํ–ฅ์ƒ๋œ for๋ฌธ

  • JCF ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ์ œ์ผ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋กœ Iterable์ด ์žˆ์Œ.
  • Iterable์ด ์ตœ์ƒ์œ„์ธ ์ด์œ ๋Š” ๋ฐ‘์—์„œ ์„ค๋ช…ํ•จ.

(1) Iterable

public interface Iterable<T> {
    Iterator<T> iterator();
}
  • ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ œ์ผ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ, ํ–ฅ์ƒ๋œ for๋ฌธ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
  • ์ฆ‰, ์ปฌ๋ ‰์…˜ ์ตœ์ƒ์œ„์ธ ์ด์œ ๋Š” ๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ ํ–ฅ์ƒ๋œ for๋ฌธ์„ ์ง€์›ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์žˆ๋Š”๊ฒƒ์ž„.

(2) Iterator

public interface Iterator<E> {
    boolean hasNext(); // ๋‹ค์Œ ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
    E next();          // ๋‹ค์Œ ์š”์†Œ ๋ฐ˜ํ™˜
    void remove();     // (์„ ํƒ์ ) ํ˜„์žฌ ์š”์†Œ ์‚ญ์ œ
}
  • ์‹ค์ œ๋กœ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
  • ์‹ค์ œ๋กœ ํ–ฅ์ƒ๋œ for๋ฌธ์€ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ปดํŒŒ์ผ ์ดํ›„์˜ for๋ฌธ์„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

(3) Iterable & Iterator ๋‚˜๋ˆˆ ์ด์œ 

  • SOLID์˜ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‘˜๋กœ ๋‚˜๋ˆˆ ๊ฒƒ์ด๋‹ค.
  • Iterable์€ Iterator๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ณต์žฅ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค
  • ํ•ด๋‹น Iterable์„ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•˜๊ณ  Iterator๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ Iterable์„ ํ†ตํ•ด Iterator๋ฅผ ์‚ฌ์šฉํ•จ์„ ๊ฐ•์ œํ•˜๊ณ  ์žˆ์Œ.
  • ํ–ฅ์ƒ๋œ for๋ฌธ์€ ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ iterator() ๋ฉ”์„œ๋“œ๊ฐ€ ์—†์œผ๋ฉด ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ฒฐ๊ตญ์€ ๋‘˜์€ for๋ฌธ ๋ž˜ํผํด๋ž˜์Šค๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. for๋ฌธ์„ ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ๋กœ ๋งŒ๋“ค์–ด์„œ ๊ฐ์ฒด๋กœ์จ ์ œ๊ณต์„ ํ•˜๋Š” ๊ฐœ๋…์ž„.

(4) ํ–ฅ์ƒ๋œ for๋ฌธ

import java.util.Iterator;

public class MyCollection implements Iterable<String> {
    private String[] data = {"apple", "banana", "cherry"};

    @Override
    public Iterator<String> iterator() {
        return new MyIterator();
    }

    private class MyIterator implements Iterator<String> {
        private int index = 0;

        @Override
        public boolean hasNext() {
            return index < data.length;
        }

        @Override
        public String next() {
            return data[index++];
        }
    }

    public static void main(String[] args) {
        MyCollection collection = new MyCollection();
        // ํ–ฅ์ƒ๋œ for๋ฌธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
        for (String item : collection) {
            System.out.println(item);
        }
    }
}
  • ๊ธฐ๋ณธ ๋ฐฐ์—ด๊ณผ Iterable์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ for๋ฌธ์ด๋‹ค.
  • ํ•ด๋‹น ์ฝ”๋“œ์—์„œ Iterable์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋‚ด๋ถ€์˜ iterator() ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ํ•ด๋‹น ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ๋ฐ˜ํ™˜ํƒ€์ž…์œผ๋กœ Iterator๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ์–ด, Iterator๋ฅผ ๊ตฌํ˜„์„ ํ•ด์„œ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.
  • ๊ธฐ๋ณธ ๋ฐฐ์—ด์€ JVM์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉฐ, Iterable์€ ์ง์ ‘ ๊ตฌํ˜„์„ ํ•ด์ค˜์•ผํ•จ.
  • Iterable ๋‚ด๋ถ€์˜ iterator() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ for๋ฌธ์„ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ํ•„์ˆ˜์ž„.

(5) ํ–ฅ์ƒ๋œ for๋ฌธ ์ปดํŒŒ์ผ ๋ณ€ํ™˜

import java.util.Iterator;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = List.of("a", "b", "c");

        // ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ณ€ํ™˜ํ•˜๋Š” ๊ตฌ์กฐ
        for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
            String item = iterator.next();
            System.out.println(item);
        }
    }
}
  • ํ–ฅ์ƒ๋œ for๋ฌธ์€ ์‹ค์ œ๋กœ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ผ๋ฆฌ์ ์ธ ์ฝ”๋“œ์ด๋ฉฐ, ์ปดํŒŒ์ผ์ด ๋˜๋ฉด ๊ธฐ๋ณธ for๋ฌธ์œผ๋กœ ๋ฐ”๋€Œ๋Š” ๊ตฌ์กฐ์ด๋‹ค.
  • ์ฆ๊ฐ์‹์ด ์ƒ๋žต๋œ for๋ฌธ์œผ๋กœ ํ˜•ํƒœ๋ฅผ ๋งŒ๋“ค์–ด์„œ next() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ฆ๊ฐ์ด ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ง„๋‹ค.

(6) ๊ฒฐ๋ก : ํ–ฅ์ƒ๋œ for๋ฌธ์€ Iterable / Iterator ํ•„์ˆ˜

public class Main {
    public static void main(String[] args) {
    
        List<String> list = new ArrayList<>();
        list.add("one"); list.add("two"); list.add("three");
        list.add("four"); list.add("five");

        // ๋ฐฉ๋ฒ•1 : for๋ฌธ์„ ์ด์šฉํ•˜๊ธฐ
        for(Iterator<String> it = list.iterator(); it.hasNext();) {
            String item = it.next();
            System.out.println(item);
        }

        // ๋ฐฉ๋ฒ•2 : while ์ด์šฉํ•˜๊ธฐ
        Iterator<String> it = list.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}
  • ๊ฒฐ๋ก ์€ ํ–ฅ์ƒ๋œ for๋ฌธ์ด ์ปดํŒŒ์ผ ๋˜๋ฉด ํ•ด๋‹น for๋ฌธ ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝ์ด ๋จ. ์ฆ‰, ๊ฐœ๋ฐœ์ž ์นœํ™”์ ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ๋งŒ๋“ค์–ด์ ธ ์žˆ์Œ.

โœ… 4. JCF์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ํด๋ž˜์Šค

  • java.util ํŒจํ‚ค์ง€์— ํฌํ•จ๋˜๋ฉฐ ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์ด๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” Set, List, Queue, Map์ด ์žˆ์œผ๋ฉฐ, ๊ตฌํ˜„ ํด๋ž˜์Šค๋Š” ๋‹ค์–‘ํ•˜๊ฒŒ ์žˆ์Œ.
  • ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„ ํด๋ž˜์Šค๋Š” HashSet, HashMap, ArrayList, LinkedList, TreeSet, TreeMap ๋“ฑ์ด ์žˆ์Œ.

(1) ์ปฌ๋ ‰์…˜ ๊ฐ์ฒด์˜ ์„ ์–ธ

Set<Integer> set = new HashSet<>();
List<Integer> list = new ArrayList<>();
List<Integer> list = new LinkedList<>();
Queue<Integer> queue = new LinkedList<>();
Map<String, Integer> map = new HashMap<>();
  • ์„ ์–ธ์€ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•ด ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค๊ณ , ๊ตฌํ˜„์ฒด๋ฅผ ์›ํ•˜๋Š” ๊ตฌํ˜„์ฒด์— ๋งž๊ฒŒ ๋„ฃ๋Š”๋‹ค.
  • ์ด์œ ๋Š”, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์œ ์—ฐ์„ฑ์„ ํ†ตํ•œ ํ™•์žฅ์„ฑ ๋“ฑ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์„ ์–ธ ๋ฐฉ์‹์„ ์ด์šฉํ•จ.

(2) Collection<E> ์ธํ„ฐํŽ˜์ด์Šค

  • Set, List, Queue ์—์„œ ๊ณตํ†ต์œผ๋กœ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ •์˜ํ•ด๋‘” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

โœ… 5. HashSet, ArrayList, LinkedList, HashMap ํด๋ž˜์Šค

(1) HashSet<E>

public class Main {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("apple");
        set.add("apple");
        set.add("banana");
        System.out.println(set); // [banana, apple] ๋˜๋Š” [apple, banana] ๋“ฑ (์ˆœ์„œ X, ์ค‘๋ณต ์ œ๊ฑฐ๋จ)
        // set.remove("apple"); ํŠน์ • ์š”์†Œ ์ง€์šฐ๊ธฐ
        // set.clear(); ํ•ด๋‹น ๋ฐฐ์—ด ์ „์ฒด ๋น„์šฐ๊ธฐ
    }
}

 

  • ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์ค‘๋ณต์œผ๋กœ ์ €์žฅ๋œ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ์ค‘๋ณต ์ €์žฅ๋œ ๊ฐ’์€ ๋ฌด์‹œํ•˜๊ณ  ํ•˜๋‚˜๋งŒ ๋ฝ‘์Œ.
  • ๋ฐ์ดํ„ฐ ์ €์žฅ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , ๋ถˆ๊ทœ์น™์ ์œผ๋กœ ์ €์žฅ์ด ๋จ. ์ฆ‰, ์ˆœ์„œ ๋ณด์žฅ์ด ๋˜์ง€ ์•Š์Œ.
  • ๋‚ด๋ถ€์ ์œผ๋กœ HashMap์„ ์ด์šฉํ•ด์„œ ์ €์žฅํ•˜๊ณ  ์žˆ์Œ. Map์˜ ํ‚ค๊ฐ’์€ ์ค‘๋ณต ์ €์žฅ์ด ์•ˆ๋˜๋ฉฐ, ์ˆœ์„œ ๋ณด์žฅ ๋˜ํ•œ ์•ˆ๋˜๋Š”๋ฐ ๋งต์˜ ํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ์ €์žฅํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Map์˜ ํŠน์„ฑ์ธ ํ•ด์‹œํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ๊ฐ’์ด ์ €์žฅ์ด ๋œ๋‹ค. ( ๊ฑ Map์„ ์“ฐ๊ณ  ์žˆ์Œ )
  • ๋ฐฉ์‹์€ Map์˜ key๊ฐ’์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ , value์—๋Š” ๋”๋ฏธ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ•˜๊ณ  ์žˆ์Œ.
  • ์ฆ‰, set์€ map์˜ ํ‚ค๊ฐ’๋งŒ ์ด์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ.

(2) ArrayList<E>

// ์žฅ์  - ์กฐํšŒ์‹œ ๋งค์šฐ ๋น ๋ฆ„
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
System.out.println("Second item: " + list.get(1)); // O(1) - ๋งค์šฐ ๋น ๋ฆ„

// ๋‹จ์  - ์ค‘๊ฐ„ ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ๋А๋ฆผ ---------
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < 100000; i++) {
    list.add("Item " + i);
}
list.add(50000, "Inserted Item"); // O(n) - ๋ฆฌ์ŠคํŠธ ์ค‘๊ฐ„์— ์‚ฝ์ž… -> ๋งŽ์€ ์š”์†Œ๊ฐ€ ๋’ค๋กœ ๋ฐ€๋ ค๋‚จ
  • List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์ด๋‹ค.
  • ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ํ—ˆ์šฉํ•˜๋ฉฐ, ์ €์žฅ ๋œ ์ˆœ์„œ์— ๋งž๊ฒŒ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฌ๋ฉด ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์˜ด
  • ๊ฒ€์ƒ‰์—๋Š” ๋น ๋ฅด์ง€๋งŒ, ์ค‘๊ฐ„์— ์‚ฝ์ž…๊ณผ ์‚ญ์ œ์—๋Š” ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ.
  • ์ด์œ ๋Š”, ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •์ด ๋˜์–ด์žˆ์–ด์„œ, ์ธ๋ฑ์Šค๋กœ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด ๊ฒ€์ƒ‰์—๋Š” ๋น ๋ฆ„
  • ํ•˜์ง€๋งŒ, ์ค‘๊ฐ„์— ์‚ฝ์ž…ํ•˜๋Š” ๊ณผ์ •์—์„œ ์‚ฝ์ž… ์œ„์น˜ ๋’ค์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ€์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋А๋ฆผ.
  • ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์žฆ์€ ๊ฒฝ์šฐ์—๋Š” LinkedList๊ฐ€ ๋” ์œ ๋ฆฌํ•จ. ๋Œ€์‹  ์ ‘๊ทผ์€ ๋А๋ฆผ.

(3) LinkedList<E> - List & Queue ๊ตฌํ˜„ ํด๋ž˜์Šค

LinkedList<String> list = new LinkedList<>();

// ์š”์†Œ ์ถ”๊ฐ€
list.add("Apple");
list.add("Banana");
list.add("Cherry");

list.addFirst("Mango"); // ๋งจ ์•ž์— ์š”์†Œ ์ถ”๊ฐ€
list.addLast("Orange"); // ๋งจ ๋’ค์— ์š”์†Œ ์ถ”๊ฐ€

System.out.println("LinkedList ๋‚ด์šฉ: " + list); // ์š”์†Œ ์ถœ๋ ฅ
System.out.println("์ฒซ ๋ฒˆ์งธ ์š”์†Œ: " + list.getFirst()); // ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ๊ฐ€์ ธ์˜ค๊ธฐ
System.out.println("๋งˆ์ง€๋ง‰ ์š”์†Œ: " + list.getLast()); // ๋งˆ์ง€๋ง‰ ์š”์†Œ ๊ฐ€์ ธ์˜ค๊ธฐ

list.remove("Banana"); // ํŠน์ • ์š”์†Œ ์‚ญ์ œ
System.out.println("Banana ์ œ๊ฑฐ ํ›„: " + list);

// ๋ฆฌ์ŠคํŠธ ์ˆœํšŒ
System.out.println("๋ฆฌ์ŠคํŠธ ์ˆœํšŒ:");
for (String fruit : list) {
    System.out.println(fruit);
}
  • ๋ฐ์ดํ„ฐ์™€ ๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜(์ฐธ์กฐ)๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•˜๋Š” ๋…ธ๋“œ๋“ค์ด ์—ฐ๊ฒฐ๋œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ๊ฐ ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ, ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋‹ค.
  • ๋…ธ๋“œ๋“ค์ด ํ™”์‚ดํ‘œ(๋งํฌ)๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์„œ, ํ•œ ๋…ธ๋“œ์—์„œ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ๋ฐฐ์—ด๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์—ฐ์†์ ์œผ๋กœ ์žˆ์ง€ ์•Š์•„๋„ ๋˜์–ด ๋™์  ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•จ.
  • ์žฅ์ : ๋ฐฐ์—ด๊ณผ ๋‹ฌ๋ฆฌ ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๋ ค๋ฉด ์š”์†Œ๋ฅผ ์ด๋™์‹œํ‚ค์ง€ ์•Š์•„๋„ ๋˜์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๋น ๋ฆ„
  • ๋‹จ์ : ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๋กœ ๋ฐ”๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋…ธ๋“œ๋ฅผ ๋”ฐ๋ผ๊ฐ€์•ผ ํ•จ. ์ž„์˜ ์ ‘๊ทผ ๋А๋ฆผ.
  • Queue ์ธํ„ฐํŽ˜์ด์Šค ๋˜ํ•œ ๊ฐ™์ด ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์ด๋‹ค. ์ฆ‰, queue ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ queue๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ.

(4) HashMap<K, V>

Map<String, Integer> map = new HashMap<>(); // key, value ๋กœ ์ €์žฅ

// ์‚ฝ์ž…
map.put("apple", 100);
map.put("banana", 200);

// ์กฐํšŒ
int applePrice = map.get("apple");
System.out.println("apple์˜ ๊ฐ€๊ฒฉ์€ " + applePrice + "์›์ž…๋‹ˆ๋‹ค.");
  • Map<K, V> ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์ด๋ฉฐ, key, value๋กœ ์ด๋ฃจ์–ด์ง„ ์›์†Œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•จ.
  • key๋Š” ์ค‘๋ณต์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ•˜๋‚˜์˜ key์— ํ•˜๋‚˜์˜ value๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ.
  • ํ•ด๋‹น key, value ์—ฌ๋Ÿฌ ์Œ๋“ค์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ.
  • ํ•ด์‹ฑ์„ ์ด์šฉํ•˜์—ฌ Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์ด๋‹ค.
  • ์ž๋ฃŒ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์ด ArrayList, LinkedList ์™€๋Š” ์ „ํ˜€ ๋‹ค๋ฆ„. ์ฆ‰, Collection๊ณผ ๋–จ์–ด์ ธ ์žˆ์Œ.

'๐Ÿ› ๏ธBackend > โ˜•Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ  (2) 2025.06.04
[Java] ์ž๋ฐ” ์ŠคํŠธ๋ฆผ(Stream) ๊ฐœ๋… + ์˜ˆ์ œ ์ด์ •๋ฆฌ ๐Ÿ“š  (2) 2025.06.03
[Java] java.nio ์‚ฌ์šฉ๋ฒ• | Path, Files, FileChannel ์˜ˆ์ œ ๋ชจ์Œ  (3) 2025.05.30
[Java] java.io ํŒจํ‚ค์ง€ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ  (2) 2025.05.28
[Java] java.lang ํŒจํ‚ค์ง€ ์ •๋ฆฌ: Object, String, Math ํด๋ž˜์Šค ์ด์ •๋ฆฌ  (0) 2025.05.26
'๐Ÿ› ๏ธBackend/โ˜•Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Java] ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • [Java] ์ž๋ฐ” ์ŠคํŠธ๋ฆผ(Stream) ๊ฐœ๋… + ์˜ˆ์ œ ์ด์ •๋ฆฌ ๐Ÿ“š
  • [Java] java.nio ์‚ฌ์šฉ๋ฒ• | Path, Files, FileChannel ์˜ˆ์ œ ๋ชจ์Œ
  • [Java] java.io ํŒจํ‚ค์ง€ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (166)
      • ๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต (32)
        • โš™๏ธ์ปดํ“จํ„ฐ์˜ ์ดํ•ด (11)
        • ๐Ÿ’ป์ปดํ“จํ„ฐ๊ณผํ•™ ๊ฐœ๋ก  (3)
        • ๐Ÿ”ข์ž๋ฃŒ๊ตฌ์กฐ (3)
        • ๐ŸŒ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ… (11)
        • ๐Ÿ›๏ธ์„ธ๊ณ„์˜์ •์น˜์™€๊ฒฝ์ œ (3)
        • ๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™๊ณผ (1)
      • ๐Ÿ› ๏ธBackend (57)
        • ๐Ÿ“š๋ฐฑ์—”๋“œ ๊ณต๋ถ€ (4)
        • โ˜•Java (23)
        • ๐ŸŒณSpring (13)
        • โš™๏ธC (1)
        • โšกPython (13)
        • JavaScript (1)
        • ๐Ÿ›ข๏ธDatabase (0)
        • Algorithm Problem Solving (2)
      • ๐ŸŒ Network (7)
        • ๐Ÿ“œHTTP (7)
      • ๐Ÿš€DevOps (1)
      • Data Structure (1)
      • โ›บ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ (65)
      • ์ •๋ณด (1)
      • ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    spring
    ํŒŒ์ด์ฌ
    Python
    ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต
    ํด๋ผ์šฐ๋“œ
    ์ปดํ“จํ„ฐ์˜ ์ดํ•ด
    ์ž๋ฃŒ๊ตฌ์กฐ
    ์œ ๋น„์ฟผํ„ฐ์Šค
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…
    ์ž๋ฐ”
    ์Šคํ”„๋ง
    ๋ฐฉ์†ก๋Œ€
    ๋ฐฉํ†ต๋Œ€
    Java
    Spring Framework
    ์ž…์ถœ๋ ฅ
    ๋ฐฐ์—ด
    ์ปดํŒŒ์ผ๋Ÿฌ
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…๊ฐœ๋ก 
    ์šด์˜์ฒด์ œ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
junbin2
[Java] ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ์ •๋ฆฌ: List, Set, Map ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋Œ€ํ‘œ ๊ตฌํ˜„์ฒด ์ด์ •๋ฆฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”