Programming/Java

F015 - Set (์ž‘์„ฑ ์ค‘)

osean 2021. 5. 31. 23:32
โœ๏ธ ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Set๊ณผ Queue ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ , ๊ฐ ํด๋ž˜์Šค ๋ณ„๋กœ ์–ด๋–ป๊ฒŒ ํ•ด๋‹น ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€, ํŠน์ง•์€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๋ ค ํ•œ๋‹ค.

Set

์ˆ˜ํ•™์—์„œ์˜ ์ง‘ํ•ฉ์˜ ๊ฐœ๋…๊ณผ ๋™์ผํ•˜๊ฒŒ ์ค‘๋ณต ์ง‘ํ•ฉ์„ ์ œ์™ธํ•˜๊ณ  ์ง‘ํ•ฉ ๋‚ด ์กด์žฌํ•˜๋Š” ์›์†Œ๋“ค์€ ์„œ๋กœ ๋‹ค๋ฅด๋ฉฐ, ๊ฐ™์€ ์›์†Œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌ ํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Set ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ฐ์ฒด ๋‚ด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋˜ํ•œ, Set ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š”๋‹ค. ๋•Œ๋ฌธ์— ํŠน์ • ์ˆœ์„œ์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์–ด ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ํ•ด๋‹น ๊ฐ์ฒด ๋‚ด์— ๋ฐ์ดํ„ฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

์ด๋Ÿฌํ•œ Set ์ธํ„ฐํŽ˜์ด์Šค๋Š” Collection ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ•˜์—ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ช…์„ธํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ HashSet, LinkedHashSet, TreeSet ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค.

Set ๋ฝ‘์•„๋จน๊ธฐ

๐Ÿ“ ๊ฐ์ฒด ๋‚ด ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์ง€๋งŒ, ํŠน์ • ํด๋ž˜์Šค๋Š” ์ˆœ์„œ ๋ฐ ์ •๋ ฌ์„ ์ง€์›ํ•œ๋‹ค.

๐Ÿ“ ๋Œ€ํ‘œ์ ์œผ๋กœ HashSet, LinkedHashSet, TreeSet ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค.

HashSet

HashSet ํด๋ž˜์Šค๋Š” List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์™€ ๋น„์Šทํ•˜๊ฒŒ Serializable, Cloneable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , AbstractSet ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ–ˆ๋‹ค.

์ด๋Š” ์•ž์„œ ๋ฐฐ์› ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ ์ง๋ ฌํ™”๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ์„œ๋ฒ„๋กœ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ , ํ•ด๋‹น ํด๋ž˜์Šค๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ํด๋ก ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, AbsctractSet ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋“ค์˜ ๊ณตํ†ต์ ์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†๋ฐ›์•„ ์ตœ์†Œํ•œ์˜ ๋ฉ”์†Œ๋“œ๋งŒ ๊ตฌํ˜„ํ•˜์—ฌ ์ค‘๋ณต ์š”์†Œ๋“ค์„ ์ œ๊ฑฐํ–ˆ์Œ์„ ๋œปํ•œ๋‹ค.

// ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
public HashSet() {
    map = new HashMap<>();
}

public HashSet(Collection<? extends E> c) {
    map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
    addAll(c);
}

public HashSet(int initialCapacity, float loadFactor) {
    map = new HashMap<>(initialCapacity, loadFactor);
}

public HashSet(int initialCapacity) {
    map = new HashMap<>(initialCapacity);
}

์œ„์˜ ์ฝ”๋“œ์™€ ์ด๋ฆ„์„ ํ†ตํ•ด HashSet ํด๋ž˜์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ HashMap ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋“ค์–ด๊ฐ€๋Š” initalCapacity๋Š” ๋ฆฌ์ŠคํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค ๋‚ด์—์„œ ์ž์ฃผ ์ ‘ํ•ด์„œ ์•Œ๊ณ  ์žˆ๋“ฏ, ๊ฐ์ฒด๊ฐ€ ์ฒ˜์Œ ์„ ์–ธ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋  ๋•Œ์˜ ๊ธธ์ด ํ˜น์€ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๊ทผ๋ฐ loadFactor ๋ผ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ loadFactor๋Š” ๋ฌด์—‡์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

LoadFactor

LoadFactor(์ดํ•˜ ๋กœ๋“œํŒฉํ„ฐ)๋Š” (๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜) / (์ €์žฅ ๊ณต๊ฐ„) ์˜๋ฏธํ•˜๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ 0.75f ๊ฐ’์„ ๊ฐ€์ง€๋Š”๋ฐ, ์ด๋Š” ์ฒ˜์Œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ 75%๊ฐ€ ์ฑ„์›Œ ์กŒ์„ ๋•Œ ํ•ด๋‹น ๊ฐ์ฒด์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๊ณ , ๊ธฐ์กด ๊ฐ์ฒด ๋‚ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ •๋ฆฌํ•ด์•ผ ํ•˜๋Š” Rehash ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋•Œ๋ฌธ์— ๋กœ๋“œ ํŒฉํ„ฐ๋ผ๋Š” ๊ฐ’์ด ํฌ๋ฉด ํด ์ˆ˜๋ก Rehash ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „๊นŒ์ง€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ๋งŽ์•„์ง€์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„์˜ค๋Š” ์‹œ๊ฐ„์€ ๊ทธ๋งŒํผ ์ฆ๊ฐ€ํ•œ๋‹ค.

์–ด๋–ป๊ฒŒ ๋™์ผํ•œ ๊ฐ์ฒด์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์ œ๊ฑฐํ• ๊นŒ?

// HashMap.put(K key, V value)
public V put(K key, V value) {
    // 1) hash() > Key๋กœ ๋ฐ›์•„์˜จ ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋น„ํŠธ์—ฐ์‚ฐ
    // 2) putVal() > Value๋กœ ๋ฐ›์•„์˜จ ๊ฐ์ฒด๋ฅผ Node์— ์ €์žฅ >
    //    ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด null ๋ฐ˜ํ™˜
    return putVal(hash(key), key, value, false, true);
}

// HashSet.add(E e)
public boolean add(E e) {
    // putVal() ๋ฉ”์†Œ๋“œ์˜ ๋ฆฌํ„ด๊ฐ’์ด null์ผ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์ค‘๋ณต์œผ๋กœ Set ๊ฐ์ฒด์— ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.
    return map.put(e, PRESENT)==null;
}

// HashSet ๋ฐ์ดํ„ฐ ์ €์žฅ ๋กœ์ง ํŒŒ์•…ํ•˜๊ธฐ
public class HashSetTest {
    public static void main(String[] args) {
        Object[]        objArray = {"1", new Integer(1), "2", "2", "3", "4", "4", "4"};
        HashSet<Object> hashSet  = new HashSet<>();

        for (Object obj : objArray) {
            System.out.println("ํ˜„์žฌ ๊ฐ’ : " + obj +  " / Set์— ๋‹ด๊ฒผ๋‚˜์š”? " + hashSet.add(obj));
        }

        System.out.println(hashSet);
    }
}

/*
    ํ˜„์žฌ ๊ฐ’ : 1 / ํ• ๋‹น ์—ฌ๋ถ€ true
    ํ˜„์žฌ ๊ฐ’ : 1 / ํ• ๋‹น ์—ฌ๋ถ€ true
    ํ˜„์žฌ ๊ฐ’ : 2 / ํ• ๋‹น ์—ฌ๋ถ€ true
    ํ˜„์žฌ ๊ฐ’ : 2 / ํ• ๋‹น ์—ฌ๋ถ€ false
    ํ˜„์žฌ ๊ฐ’ : 3 / ํ• ๋‹น ์—ฌ๋ถ€ true
    ํ˜„์žฌ ๊ฐ’ : 4 / ํ• ๋‹น ์—ฌ๋ถ€ true
    ํ˜„์žฌ ๊ฐ’ : 4 / ํ• ๋‹น ์—ฌ๋ถ€ false
    ํ˜„์žฌ ๊ฐ’ : 4 / ํ• ๋‹น ์—ฌ๋ถ€ false
    [1, 1, 2, 3, 4]
*/

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

HashSet ํด๋ž˜์Šค์—์„œ๋Š” ๋‹ค๋ฅธ Collection ํด๋ž˜์Šค๋“ค๊ณผ ๋น„์Šทํ•˜๊ฒŒ add() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

์ด ๋•Œ, HashSet์€ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž์— ์˜ํ•ด HashMap ๊ฐ์ฒด๋ฅผ ๋‚ด๋ถ€์— ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๊ณ , add() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ƒ์„ฑ๋œ HashMap ๊ฐ์ฒด์˜ put() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, put() ๋ฉ”์†Œ๋“œ๋Š” HashMap ๋‚ด๋ถ€์— ์ •์˜๋œ putVal() ๋ฉ”์†Œ๋“œ์™€ hash() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

HashMap ํด๋ž˜์Šค์˜ hash() ๋ฉ”์†Œ๋“œ๋Š” put() ๋ฉ”์†Œ๋“œ์—์„œ ๋ฐ›์•„์˜จ Key ๊ฐ์ฒด์˜ hashcode() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋น„ํŠธ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ด ๋•Œ ๋ฐ˜ํ™˜๋œ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ putVal() ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ value ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ™•์ธํ•˜๊ณ  ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด Node๋ฅผ ์ƒ์„ฑ, ์ค‘๋ณต๋œ๋‹ค๋ฉด null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฐ˜ํ™˜๋œ ๊ฐ’์ด null์ด๋ผ๋ฉด HashSet ๊ฐ์ฒด์— ๋‹ด๊ธธ ๋ฐ์ดํ„ฐ๋Š” ์ค‘๋ณต์œผ๋กœ ์ธํ•ด ๋‹ด๊ธฐ์ง€ ๋ชปํ•˜๊ณ , null์ด ์•„๋‹ˆ๋ผ๋ฉด ๊ฐ์ฒด์— ๋‹ด๊ธธ ๊ฒƒ์ด๋‹ค.

์ฆ‰, HashMap์˜ ๋‚ด๋ถ€ ๋ฉ”์†Œ๋“œ์— ์˜ํ•ด equals(), hashcode()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ์— ์ค‘๋ณต์„ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋” ์ž์„ธํžˆ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” HashMap๊ณผ HashTable, Hash ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด์ž!


TreeSet

TreeSet ํด๋ž˜์Šค๋Š” HashSet๊ณผ ๋‹ฌ๋ฆฌ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ํด๋ž˜์Šค์ด๋‹ค. ๋•Œ๋ฌธ์— ๋ฒ”์œ„ ํƒ์ƒ‰๊ณผ ์ •๋ ฌ์— ์œ ๋ฆฌํ•œ๋ฐ, ์œ„์˜ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์‚ดํŽด๋ณด๋ฉด HashSet ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ SortedSet ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ•œ NavigableSet ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

TreeSet ํด๋ž˜์Šค๋Š” ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ”์œ„ ํƒ์ƒ‰๊ณผ ์ •๋ ฌ์— ์œ ๋ฆฌํ•˜๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ์™œ ์œ ๋ฆฌํ•œ๊ฑธ๊นŒ?

Binary Tree

์ด์ง„ ํŠธ๋ฆฌ๋Š” ์‹œ์ž‘์ ์ธ Root ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋…ธ๋“œ์— ์ตœ๋Œ€ 2๊ฐœ์˜ ํ•˜์œ„ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ด์ง„ ํŠธ๋ฆฌ๋Š” O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, ์ด๋Š” ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ชจ๋“  ํ•˜์œ„ ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ“ ์ „์œ„ ์ˆœํšŒ (preorder)
๋ฃจํŠธ ๋…ธ๋“œ > ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ > ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ์ˆœ์œผ๋กœ ์ˆœํšŒํ•œ๋‹ค.

๐Ÿ“ ์ค‘์œ„ ์ˆœํšŒ (postorder)
์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ > ๋ถ€๋ชจ ๋…ธ๋“œ > ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ ์ˆœ์œผ๋กœ ์ˆœํšŒํ•œ๋‹ค.

๐Ÿ“ ํ›„์œ„ ์ˆœํšŒ (inorder)
์™ผ์ชฝ ์‚ฌ์ง ๋…ธ๋“œ > ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ > ๋ถ€๋ชจ ๋…ธ๋“œ ์ˆœ์œผ๋กœ ์ˆœํšŒํ•œ๋‹ค.

Bianry Search Tree

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์ด์ง„ ํŠธ๋ฆฌ์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์กด์žฌ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋™์ผํ•˜์ง€๋งŒ, ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ •ํ•  ๋•Œ ๊ทœ์น™์ด ์กด์žฌํ•œ๋‹ค.

๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๊ฐ’ ๋ณด๋‹ค ํฌ๋ฉด ์™ผ์ชฝ์—, ์ž‘๋‹ค๋ฉด ์˜ค๋ฅธ์ชฝ์— ์ž์‹ ๋…ธ๋“œ๋ฅผ ์œ„์น˜ํ•˜๋„๋ก ํ•œ๋‹ค. ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์— ์žˆ์–ด ๋ถ€๋ชจ ๋…ธ๋“œ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ํฐ ๊ฒฝ์šฐ์„ ๊ธฐ์ค€์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ‰๊ท ์ ์œผ๋กœ O(logN)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ค‘์œ„ ์ˆœํšŒ๋ฅผ ํ†ตํ•ด ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค.

๐Ÿ“ ๋ชจ๋“  ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์€ ์œ ์ผํ•˜๋‹ค.

๐Ÿ“ ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ํ‚ค ๊ฐ’๋“ค์€ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’๋ณด๋‹ค ์ž‘๋‹ค.

๐Ÿ“ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ํ‚ค ๊ฐ’๋“ค์€ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค.

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

F017 - Blocking, Non-Blocking / Synchronous, Asynchronous  (2) 2021.06.15
F016 - File, I/O, Stream  (0) 2021.06.14
F014 - List (ArrayList, LinkedList, Vector, Stack)  (0) 2021.05.30
F013 - Generic  (0) 2021.05.26
F012 - Annotation  (0) 2021.05.24