λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λͺ©λ‘μ΄ μ—†μŠ΅λ‹ˆλ‹€.

[JAVA] μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬(Collection Framework)

πŸ—£ Language/JAVA
    λ°˜μ‘ν˜•

    μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬(Collection Framework)

    μžλ°”μ—μ„œ μ»¬λ ˆμ…˜ ν”„λ ˆμž„μ›Œν¬μ΄λž€, λ‹€μˆ˜μ˜ 데이터λ₯Ό μ‰½κ³  효과적으둜 μ²˜λ¦¬ν•  수 μžˆλŠ” ν‘œμ€€ν™”λœ 방법을 μ œκ³΅ν•˜λŠ” 클래슀의 집합을 μ˜λ―Έν•œλ‹€. λ‹€μ‹œ 말해 데이터λ₯Ό μ €μž₯ν•˜λŠ” 자료 ꡬ쑰와 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬μ‘°ν™”ν•˜μ—¬ 클래슀둜 κ΅¬ν˜„ν•΄ 놓은 것이닀.


    JDK 1.2 μ΄μ „κΉŒμ§€λŠ” Vector, Hashtable, Properties와 같은 μ»¬λ ‰μ…˜ ν΄λž˜μŠ€λ“€μ„ μ„œλ‘œ 각자 λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν•΄μ•Ό ν–ˆμœΌλ‚˜ JDK 1.2λΆ€ν„° μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›μ΄ λ“±μž₯ν•˜λ©΄μ„œ λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ μ»¬λ ‰μ…˜ ν΄λž˜μŠ€κ°€ μΆ”κ°€λ˜κ³  λͺ¨λ“  μ»¬λ ‰μ…˜ 클래슀λ₯Ό ν‘œμ€€ν™”λœ λ°©μ‹μœΌλ‘œ λ‹€λ£° 수 μžˆλ„λ‘ μ²΄κ³„ν™”λ˜μ—ˆλ‹€.


    μ΄λŸ¬ν•œ μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ€ μžλ°”μ˜ μΈν„°νŽ˜μ΄μŠ€(interface)λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„λœλ‹€.


    μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ 핡심 μΈν„°νŽ˜μ΄μŠ€

    μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ—μ„œλŠ” 크게 μ»¬λ ‰μ…˜μ„ 3가지 νƒ€μž…μœΌλ‘œ λ‚˜λˆ„μ–΄ ν•΅μ‹¬μ΄ λ˜λŠ” μ£Όμš” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν–ˆλ‹€.


    1. List μΈν„°νŽ˜μ΄μŠ€

    2. Set μΈν„°νŽ˜μ΄μŠ€

    3. Map μΈν„°νŽ˜μ΄μŠ€


    μ—¬κΈ°μ„œ List와 Set μΈν„°νŽ˜μ΄μŠ€μ˜ 곡톡점을 뽑아내어 μƒˆλ‘œμš΄ μΈν„°νŽ˜μ΄μŠ€μΈ Collection을 μΆ”κ°€λ‘œ μ •μ˜ν•˜μ˜€λ‹€. Map μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬μ‘°μƒμ˜ 차이둜 인해 λ³„λ„λ‘œ μ •μ˜λœλ‹€. 후에 μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ μ‹€μ„Έ μ†ŒμŠ€λ₯Ό 뢄석해보면 객체지ν–₯적인 섀계λŠ₯λ ₯을 ν–₯μƒμ‹œν‚€λŠ”λ° λ§Žμ€ 도움이 될 것이닀.


    μžλ°”μ—μ„œ μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬λ₯Ό κ΅¬μ„±ν•˜κ³  μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€ κ°„μ˜ 상속 κ΄€κ³„λŠ” λ‹€μŒ κ·Έλ¦Όκ³Ό κ°™λ‹€.

    μ£Όμš” μΈν„°νŽ˜μ΄μŠ€ κ°„μ˜ 상속 κ΄€κ³„μ£Όμš” μΈν„°νŽ˜μ΄μŠ€ κ°„μ˜ 상속 관계

     μœ„μ˜ κ·Έλ¦Όμ—μ„œ <E>λ‚˜ <K, V>λŠ” μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬λ₯Ό κ΅¬μ„±ν•˜λŠ” λͺ¨λ“  ν΄λž˜μŠ€κ°€ μ œλ„€λ¦­μœΌλ‘œ ν‘œν˜„λ˜μ–΄ μžˆλ‹€λŠ” 것을 μ•Œλ €μ€€λ‹€.


    μ£Όμš” μΈν„°νŽ˜μ΄μŠ€μ˜ κ°„λž΅ν•œ νŠΉμ§•

     μΈν„°νŽ˜μ΄μŠ€

    μ„€λͺ… 

    κ΅¬ν˜„ 클래슀 

    List<E> 

    μˆœμ„œκ°€ μžˆλŠ” λ°μ΄ν„°μ˜ μ§‘ν•©μœΌλ‘œ, λ°μ΄ν„°μ˜ 쀑볡을 ν—ˆμš©ν•œλ‹€. 
    예) λŒ€κΈ°μž λͺ…단

    Vector, ArrayList, LinkedList, Stack, Queue λ“±

     Set<E>

    μˆœμ„œκ°€ μ—†λŠ” λ°μ΄ν„°μ˜ μ§‘ν•©μœΌλ‘œ, λ°μ΄ν„°μ˜ 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€. 

    예) μ–‘μ˜ μ •μˆ˜μ§‘ν•©, μ†Œμˆ˜μ˜ 집합

    HashSet, TreeSet λ“±

    Map<K, V> 

     ν‚€(Key)와 κ°’(Value)의 ν•œ 쌍으둜 이루어진 λ°μ΄ν„°μ˜ μ§‘ν•©μœΌλ‘œ μˆœμ„œκ°€ μ—†λ‹€.
    ν‚€λŠ” 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•Šμ§€λ§Œ 값은 쀑볡될 수 μžˆλ‹€.
    예) 우편번호, μ§€μ—­λ²ˆν˜Έ(μ „ν™”λ²ˆν˜Έ)

     HashMap, TreeMap, Hashtable, Properties


    μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ— μ†ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀λ₯Ό μ»¬λ ‰μ…˜ 클래슀(Collection Class)라고 ν•œλ‹€. (즉 μœ„μ˜ List, Set, Map 3가지 쀑에 ν•˜λ‚˜λ₯Ό κ΅¬ν˜„ν•˜κ³  있음.) κ΅¬ν˜„ν•œ μΈν„°νŽ˜μ΄μŠ€μ˜ 이름이 ν΄λž˜μŠ€μ˜ 이름에  ν¬ν•¨λ˜μ–΄ μžˆμ–΄μ„œ μ΄λ¦„λ§ŒμœΌλ‘œλ„ 클래슀의 νŠΉμ§•μ„ μ‰½κ²Œ μ•Œ 수 μžˆλ„λ‘ λ˜μ–΄μžˆλ‹€.

    (Vector, Stack, Hashtable, Properties와 같은 ν΄λž˜μŠ€λ“€μ€ μ»¬λ ˆμ…˜ ν”„λ ˆμž„μ›Œν¬κ°€ λ§Œλ“€μ–΄μ§€κΈ° 전에 μ‘΄μž¬ν•˜λ˜ 것이기 λ•Œλ¬Έμ— μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ λͺ…λͺ…법을 λ”°λ₯΄μ§€ μ•ŠμŒ, Vectorλ‚˜ Hashtableκ³Ό 같은 기쑴의 μ»¬λ ‰μ…˜ ν΄λž˜μŠ€λ“€μ€ ν˜Έν™˜μ„ μœ„ν•΄μ„œ λ‚¨κ²¨λ‘μ—ˆμ§€λ§Œ κ°€λŠ₯ν•˜λ©΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€. κ·Έ λŒ€μ‹  μƒˆλ‘œ μΆ”κ°€λœ ArrayList와  HashMap을 μ‚¬μš©ν•˜μž)


    κ°„λ‹¨ν•œ μ˜ˆμ‹œ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import java.util.*;
     
    public class Collection01 {
        public static void main(String[] args) {
            // λ¦¬μŠ€νŠΈ μƒμ„±
            ArrayList<String> arrList = new ArrayList<String>();
     
            // λ¦¬μŠ€νŠΈμ— μš”μ†Œμ˜ μ €μž₯
            arrList.add("λ„·");
            arrList.add("λ‘˜");
            arrList.add("μ…‹");
            arrList.add("ν•˜λ‚˜");
     
     
            // λ¦¬μŠ€νŠΈ μš”μ†Œμ˜ μΆœλ ₯
            for(int i = 0; i < arrList.size(); i++) {
                System.out.println(arrList.get(i));
            }
        }
    }
    cs



    [μ‹€ν–‰ κ²°κ³Ό]

    λ„·

    λ‘˜

    μ…‹

    ν•˜λ‚˜



    Collection μΈν„°νŽ˜μ΄μŠ€

    List와 Set의 쑰상인 Collection μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” μ£Όμš” λ©”μ„œλ“œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.


     λ©”μ†Œλ“œ

    μ„€λͺ… 

     boolean add(Object o)

     boolean addAll(Collection c)

    ν•΄λ‹Ή μ»¬λ ‰μ…˜μ— μ „λ‹¬λœ μš”μ†Œλ₯Ό 좔가함 

     void clear()

    ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό μ œκ±°ν•¨ 

    boolean contains(Object o)

    boolean containsAll(Collection c) 

    μ§€μ •λœ 객체(o) λ˜λŠ” μ»¬λ ‰μ…˜μ˜ 객체듀이 μ»¬λ ‰μ…˜μ— ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ 확인함

    boolean equals(Object o) 

    λ™μΌν•œ μ»¬λ ‰μ…˜μΈμ§€ 비ꡐ함

    boolean isEmpty() 

    μ»¬λ ‰μ…˜μ΄ λΉ„μ–΄μžˆλŠ”μ§€ 확인함 

    Iterator<E> iterator() 

    ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ 반볡자(iterator)λ₯Ό λ°˜ν™˜ν•¨

    boolean remove(Object o) 

     μ§€μ •λœ 객체λ₯Ό μ‚­μ œν•¨ 

    int size() 

    ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ μš”μ†Œμ˜ 총 개수λ₯Ό λ°˜ν™˜ν•¨

    Object[] toArray()

    ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό Object νƒ€μž…μ˜ λ°°μ—΄λ‘œ λ°˜ν™˜ν•¨


    (JDK 1.8λΆ€ν„° μΆ”κ°€λœ parallelStream, removeIf, stream, forEach 등은 λ’€μ˜ λžŒλ‹€μ™€ μŠ€νŠΈλ¦Όμ—μ„œ μ„€λͺ…)


    JAVA API 링크

    Β· Collection



    List μΈν„°νŽ˜μ΄μŠ€

    List μΈν„°νŽ˜μ΄μŠ€λŠ” 쀑볡을 ν—ˆμš©ν•˜λ©΄μ„œ μ €μž₯μˆœμ„œκ°€ μœ μ§€λ˜λŠ” μ»¬λ ‰μ…˜μ„ κ΅¬ν˜„ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. λŒ€ν‘œμ μΈ List μ»¬λ ‰μ…˜ ν΄λž˜μŠ€μ— μ†ν•˜λŠ” ν΄λž˜μŠ€λŠ” λ‹€μŒκ³Ό κ°™λ‹€.


    1. ArrayList<E>

    2. LinkedList<E>

    3. Vector<E>

    4. Stack<E>



    ArrayList<E> 클래슀

    ArrayListν΄λž˜μŠ€λŠ” κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” μ»¬λ ‰μ…˜ 클래슀 쀑 ν•˜λ‚˜μ΄λ‹€. JDK 1.2λΆ€ν„° μ œκ³΅λ˜μ—ˆκ³  λ‚΄λΆ€μ μœΌλ‘œ Object 배열을 μ΄μš©ν•˜μ—¬ μš”μ†Œλ₯Ό μ €μž₯ν•œλ‹€. 인덱슀 0λ²ˆμ§ΈλΆ€ν„° μ°¨λ ˆλŒ€λ‘œ μ±„μ›Œλ‚˜κ°€λ©° 꽉 μ°¬ κ²½μš°μ—λŠ” 보닀 큰 μƒˆλ‘œμš΄ 배열을 μƒμ„±ν•΄μ„œ 기쑴의 배열에 μ €μž₯된 λ‚΄μš©μ„ μƒˆλ‘œμš΄ λ°°μ—΄λ‘œ λ³΅μ‚¬ν•œ λ‹€μŒμ— μ €μž₯λœλ‹€. 이 과정은 μžλ™μœΌλ‘œ μˆ˜ν–‰λ˜μ§€λ§Œ, μš”μ†Œμ˜ μΆ”κ°€ 및 μ‚­μ œ μž‘μ—…μ΄ 걸린느 μ‹œκ°„μ΄ 맀우 κΈΈμ–΄μ§€λŠ” 단점을 κ°€μ§€κ²Œ λœλ‹€. λ‹¨λ°©ν–₯ 포인터 ꡬ쑰둜 μžλ£Œμ— λŒ€ν•œ 순차적인 접근에 강점이 μžˆλ‹€. (단방ν–₯ 포인터이기 λ•Œλ¬Έμ— Iteratorλ₯Ό μ‚¬μš©ν•˜λ©΄ 쒋을 것 κ°™μŒ)



    ArrayList μ˜ˆμ‹œ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    ArrayList<Integer> arrList = new ArrayList<Integer>();
     
    // add() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μ €μž₯
    arrList.add(40);
    arrList.add(20);
    arrList.add(30);
    arrList.add(10);
     
    // for λ¬Έκ³Ό get() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μΆœλ ₯
    for (int i = 0; i < arrList.size(); i++) {
        System.out.print(arrList.get(i) + " ");
    }
     
    // remove() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μ œκ±°
    arrList.remove(1);
     
    // Enhanced for λ¬Έκ³Ό get() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μΆœλ ₯
    for (int e : arrList) {
        System.out.print(e + " ");
    }
     
    // Collections.sort() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μ •λ ¬
    Collections.sort(arrList);
     
    // iterator() λ©”μ†Œλ“œμ™€ get() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μΆœλ ₯
    Iterator<Integer> iter = arrList.iterator();
     
    while (iter.hasNext()) {
        System.out.print(iter.next() + " ");
    }
     
    // set() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ λ³€κ²½
    arrList.set(020);
     
    for (int e : arrList) {
        System.out.print(e + " ");
    }
     
    // size() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μ΄ κ°œμˆ˜
    System.out.println("리슀트의 ν¬κΈ° : " + arrList.size());
    cs


    μ‹€ν–‰κ²°κ³Ό


    40 20 30 10 

    40 30 10

    10 30 40 

    20 30 40

    리슀트의 크기 : 3


    μœ„ 예제처럼 μ»¬λ ‰μ…˜ 클래슀의 μš”μ†Œλ₯Ό 좜λ ₯ν•˜λŠ” λ°©λ²•μ—λŠ” for λ¬Έκ³Ό enhanced for λ¬Έ, iterator() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ 방법 λ“± λ‹€μ–‘ν•œ 방법을 μ‚¬μš©ν•  수 μžˆλ‹€. 


    JAVA API 링크

    Β· ArrayList



    LinkedList<E> 클래슀

    LinkedList ν΄λž˜μŠ€λŠ” ArrayList ν΄λž˜μŠ€κ°€ 배열을 μ΄μš©ν•˜μ—¬ 데이터λ₯Ό μ €μž₯ν•¨μœΌλ‘œμ¨ λ°œμƒν•˜λŠ” 단점을 κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ νƒ„μƒν–ˆλ‹€. JDK 1.2λΆ€ν„° 제곡된 LinkedList ν΄λž˜μŠ€λŠ” λ‚΄λΆ€μ μœΌλ‘œ μ—°κ²° 리슀트 (linked list)λ₯Ό μ΄μš©ν•˜μ—¬ μš”μ†Œλ₯Ό μ €μž₯ν•œλ‹€. 배열은 순차적으둜 μ €μž₯λ˜μ§€λ§Œ μ—°κ²° λ¦¬μŠ€νŠΈλŠ” μ €μž₯된 μš”μ†Œκ°€ λΉ„μˆœμ°¨μ μœΌλ‘œ λΆ„ν¬λ˜λ©°, μ΄λŸ¬ν•œ μš”μ†Œλ“€ 사이λ₯Ό 링크(link)둜 μ—°κ²°ν•˜μ—¬ κ΅¬μ„±ν•œλ‹€.


    μ—°κ²° λ¦¬μŠ€νŠΈμ—λŠ” 단일 μ—°κ²° 리슀트(singly linked list)와 이쀑 μ—°κ²° 리슀트(doubly linked list)κ°€ μžˆλ‹€.


    단일 μ—°κ²° λ¦¬μŠ€νŠΈλ‹¨μΌ μ—°κ²° 리슀트

    단일 μ—°κ²° λ¦¬μŠ€νŠΈλŠ” μ €μž₯κ³Ό μ‚­μ œ μž‘μ—…μ΄ λ‹€μŒ μš”μ†Œλ₯Ό κ°€λ¦¬ν‚€λŠ” 참쑰만 λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ, μ•„μ£Ό λΉ λ₯΄λ‹€. ν•˜μ§€λ§Œ 이전 μš”μ†Œλ‘œ μ ‘κ·Όν•˜κΈ°κ°€ 맀우 μ–΄λ ΅κΈ° λ•Œλ¬Έμ— 이λ₯Ό κ°œμ„ ν•œ 것이 λ°”λ‘œ 이쀑 μ—°κ²° 리슀트(doubly linked list)이닀.


    이쀑 μ—°κ²° λ¦¬μŠ€νŠΈμ΄μ€‘ μ—°κ²° 리슀트



    LinkedList ν΄λž˜μŠ€λ„ 이쀑 μ—°κ²° 리슀트λ₯Ό λ‚΄λΆ€μ μœΌλ‘œ κ΅¬ν˜„ν•œ 것이닀. λ˜ν•œ, LinkedList 클래슀 μ—­μ‹œ List μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ―€λ‘œ, ArrayList ν΄λž˜μŠ€μ™€ μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ„œλ“œκ°€ 거의 κ°™λ‹€. ArrayList와 LinkedList의 μ°¨μ΄λŠ” μ‚¬μš© 방법이 μ•„λ‹Œ, λ‚΄λΆ€μ μœΌλ‘œ μš”μ†Œλ₯Ό μ €μž₯ν•˜λŠ” 방법에 μžˆλ‹€.


    Vector<E> 클래슀

    Vector ν΄λž˜μŠ€λŠ” JDK.1.0λΆ€ν„° μ‚¬μš©ν•΄μ˜¨ ArrayList와 같은 λ™μž‘μ„ μˆ˜ν–‰ν•˜λŠ” ν΄λž˜μŠ€μ΄λ‹€. ν•˜μ§€λ§Œ ν˜„μž¬μ—λŠ” κΈ°μ‘΄ μ½”λ“œμ™€μ˜ ν˜Έν™˜μ„±μ„ μœ„ν•΄μ„œλ§Œ λ‚¨μ•„μžˆμœΌλ―€λ‘œ, Vector ν΄λž˜μŠ€λ³΄λ‹€λŠ” ArrayList 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.


    JAVA API 링크

    Β· Vector



    Stackκ³Ό Queue

    Stack<E> ν΄λž˜μŠ€λŠ” List μ»¬λ ‰μ…˜ 클래슀의 Vector 클래슀λ₯Ό 상속받아, μ „ν˜•μ μΈ μŠ€νƒ λ©”λͺ¨λ¦¬ ꡬ쑰의 클래슀λ₯Ό μ œκ³΅ν•œλ‹€. μŠ€νƒ λ©”λͺ¨λ¦¬ κ΅¬μ‘°λŠ” μ„ ν˜• λ©”λͺ¨λ¦¬ 곡간에 데이터λ₯Ό μ €μž₯ν•˜λ©΄μ„œ ν›„μž…μ„ μΆœ(LIFO)의 원리λ₯Ό λ”°λ₯΄λŠ” μžλ£Œκ΅¬μ‘°λ‹€. (λ‚˜μ€‘μ— μ €μž₯[push]된 데이터가 κ°€μž₯ λ¨Όμ € 인좜[pop]λ˜λŠ” ꡬ쑰)


    Stack 클래슀 ꡬ쑰Stack 클래슀 ꡬ쑰

    Stack ν΄λž˜μŠ€λŠ” μŠ€νƒ λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•΄, Vector 클래슀의 λ©”μ„œλ“œλ₯Ό 5개만 상속받아 μ‚¬μš©ν•œλ‹€.


    λ©”μ„œλ“œ 

    μ„€λͺ… 

     boolean empty()

     ν•΄λ‹Ή μŠ€νƒμ΄ λΉ„μ–΄ 있으면 trueλ₯Ό, λΉ„μ–΄ μžˆμ§€ μ•ŠμœΌλ©΄ falseλ₯Ό λ°˜ν™˜ν•¨.

     E peek()

     ν•΄λ‹Ή μŠ€νƒμ˜ 제일 상단에 μžˆλŠ”(제일 λ§ˆμ§€λ§‰μœΌλ‘œ μ €μž₯된) μš”μ†Œλ₯Ό λ°˜ν™˜ν•¨.

     E pop()

     ν•΄λ‹Ή μŠ€νƒμ˜ 제일 상단에 μžˆλŠ”(제일 λ§ˆμ§€λ§‰μœΌλ‘œ μ €μž₯된) μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜κ³ , ν•΄λ‹Ή μš”μ†Œλ₯Ό μŠ€νƒμ—μ„œ μ œκ±°ν•¨.

     E push(E item)

     ν•΄λ‹Ή μŠ€νƒμ˜ 제일 상단에 μ „λ‹¬λœ μš”μ†Œλ₯Ό μ‚½μž…ν•¨.

     int search(Object o)

     ν•΄λ‹Ή μŠ€νƒμ—μ„œ μ „λ‹¬λœ 객체가 μ‘΄μž¬ν•˜λŠ” μœ„μΉ˜μ˜ 인덱슀λ₯Ό λ°˜ν™˜ν•¨.


    μ΄λ•Œ μΈλ±μŠ€λŠ” 제일 상단에 μžˆλŠ”(제일 λ§ˆμ§€λ§‰μœΌλ‘œ μ €μž₯된) μš”μ†Œμ˜ μœ„μΉ˜λΆ€ν„° 0이 μ•„λ‹Œ 1λΆ€ν„° μ‹œμž‘ν•¨.


    (λ”μš± λ³΅μž‘ν•˜κ³  λΉ λ₯Έ μŠ€νƒμ„ κ΅¬ν˜„ν•˜κ³  μ‹Άλ‹€λ©΄ Deque μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ArrayDeque 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.)


    Stack μ—μ œ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Stack<Integer> st = new Stack<Integer>(); // μŠ€νƒμ˜ μƒμ„±
    //Deque<Integer> st = new ArrayDeque<Integer>(); // search λ©”μ„œλ“œλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠμŒ.
     
    // push() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μ €μž₯
    st.push(4);
    st.push(2);
    st.push(3);
    st.push(1);
     
    // peek() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ λ°˜ν™˜
    System.out.println(st.peek());
    System.out.println(st);
     
    // pop() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ λ°˜ν™˜ λ° μ œκ±°
    System.out.println(st.pop());
    System.out.println(st);
     
    // search() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μœ„μΉ˜ κ²€μƒ‰
    System.out.println(st.search(4));
    System.out.println(st.search(3));
    cs


    μ‹€ν–‰ κ²°κ³Ό


    1

    [4, 2, 3, 1]

    1

    [4, 2, 3]

    3

    1


    JAVA API 링크

    Β· Stack




    Queue<E> μΈν„°νŽ˜μ΄μŠ€

    클래슀둜 κ΅¬ν˜„λœ μŠ€νƒκ³ΌλŠ” 달리 μžλ°”μ—μ„œ 큐 λ©”λͺ¨λ¦¬ κ΅¬μ‘°λŠ” λ³„λ„μ˜ μΈν„°νŽ˜μ΄μŠ€ ν˜•νƒœλ‘œ μ œκ³΅λœλ‹€. μ΄λŸ¬ν•œ Queue μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†λ°›λŠ” ν•˜μœ„ μΈν„°νŽ˜μ΄μŠ€λŠ” λ‹€μŒκ³Ό κ°™λ‹€.


    1. Deque<E>

    2. BlockingDeque<E>

    3. BlockingQueue<E>

    4. TransferQueue<E>


    Queue μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ§κ°„μ ‘μ μœΌλ‘œ κ΅¬ν˜„ν•œ ν΄λž˜μŠ€λŠ” μƒλ‹Ήνžˆ λ§Žλ‹€. κ·Έμ™€μ€‘μ—μ„œλ„ DequeμΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ LinkedListν΄λž˜μŠ€κ°€ 큐 λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 κ°€μž₯ 많이 μ‚¬μš©λœλ‹€.



    Queue μΈν„°νŽ˜μ΄μŠ€λŠ” ν λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•΄, λ‹€μŒκ³Ό 같은 Collection μΈν„°νŽ˜μ΄μŠ€ λ©”μ†Œλ“œλ§Œμ„ 상속받아 μ‚¬μš©ν•œλ‹€.


     λ©”μ„œλ“œ

    μ„€λͺ… 

    boolean add 

     ν•΄λ‹Ή 큐의 맨 뒀에 μ „λ‹¬λœ μš”μ†Œλ₯Ό μ‚½μž…ν•¨.


    λ§Œμ•½ μ‚½μž…μ— μ„±κ³΅ν•˜λ©΄ trueλ₯Ό λ°˜ν™˜ν•˜κ³ , 큐에 μ—¬μœ  곡간이 μ—†μ–΄ μ‚½μž…μ— μ‹€νŒ¨ν•˜λ©΄ IllegalStateException을 λ°œμƒμ‹œν‚΄.

     E element()

     ν•΄λ‹Ή 큐의 맨 μ•žμ— μžˆλŠ”(제일 λ¨Όμ € μ €μž₯된) μš”μ†Œλ₯Ό λ°˜ν™˜ν•¨.

     boolean offer(E e)

     ν•΄λ‹Ή 큐의 맨 뒀에 μ „λ‹¬λœ μš”μ†Œλ₯Ό μ‚½μž…ν•¨.

     E peek()

     ν•΄λ‹Ή 큐의 맨 μ•žμ— μžˆλŠ”(제일 λ¨Όμ € μ €μž₯된) μš”μ†Œλ₯Ό λ°˜ν™˜ν•¨.


    λ§Œμ•½ 큐가 λΉ„μ–΄μžˆμœΌλ©΄ null을 λ°˜ν™˜ν•¨.

     E poll()

     ν•΄λ‹Ή 큐의 맨 μ•žμ— μžˆλŠ”(제일 λ¨Όμ € μ €μž₯된) μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜κ³ , ν•΄λ‹Ή μš”μ†Œλ₯Ό νμ—μ„œ μ œκ±°ν•¨.


    λ§Œμ•½ 큐가 λΉ„μ–΄μžˆμœΌλ©΄ null을 λ°˜ν™˜ν•¨.

     E remove()

     ν•΄λ‹Ή 큐의 맨 μ•žμ— μžˆλŠ”(제일 λ¨Όμ € μ €μž₯된) μš”μ†Œλ₯Ό μ œκ±°ν•¨.


    (Java SE 6λΆ€ν„° μ§€μ›λ˜λŠ” ArrayDeque ν΄λž˜μŠ€λŠ” μŠ€νƒκ³Ό 큐 λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•˜λŠ”λ° κ°€μž₯ μ ν•©ν•œ ν΄λž˜μŠ€λ‹€.)

    (μŠ€νƒκ³Ό 큐λ₯Ό μ‚¬μš©ν•˜μ—¬ undo / redo 같은 κΈ°λŠ₯을 λ§Œλ“€ 수 μžˆλ‹€.)


    JAVA API 링크

    Β· Queue



    Set μΈν„°νŽ˜μ΄μŠ€

    Set μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ Set μ»¬λ ‰μ…˜ ν΄λž˜μŠ€λŠ” μš”μ†Œμ˜ μ €μž₯ μˆœμ„œλ₯Ό μœ μ§€ν•˜μ§€ μ•Šκ³ , 같은 μš”μ†Œμ˜ 쀑볡저μž₯을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€. λŒ€ν‘œμ μœΌλ‘œλŠ” HashSet<E>κ³Ό TreeSet<E>이 μžˆλ‹€.



    Set μΈν„°νŽ˜μ΄μŠ€λŠ” Collection μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†λ°›μœΌλ―€λ‘œ, Collection μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜ν•œ λ©”μ†Œλ“œλ„ λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆλ‹€.

    Set μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” μ£Όμš” λ©”μ†Œλ“œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.


     λ©”μ„œλ“œ

    μ„€λͺ… 

    boolean add(E e) 

    ν•΄λ‹Ή 집합(set)에 μ „λ‹¬λœ μš”μ†Œλ₯Ό 좔가함. 

     void clear()

     ν•΄λ‹Ή μ§‘ν•©μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό μ œκ±°ν•¨. 

     boolean contains(Object o)

     ν•΄λ‹Ή 집합이 μ „λ‹¬λœ 객체λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ”μ§€λ₯Ό 확인함.

     boolean equals(Object o)

     ν•΄λ‹Ή 집합과 μ „λ‹¬λœ 객체가 같은지λ₯Ό 확인함.

     boolean isEmpty()

     ν•΄λ‹Ή 집합이 λΉ„μ–΄μžˆλŠ”μ§€λ₯Ό 확인함.

     Iterator<E> iterator()

     ν•΄λ‹Ή μ§‘ν•©μ˜ 반볡자(iterator)λ₯Ό λ°˜ν™˜ν•¨.

     boolean remove(Object o)

     ν•΄λ‹Ή μ§‘ν•©μ—μ„œ μ „λ‹¬λœ 객체λ₯Ό μ œκ±°ν•¨.

     int size()

     ν•΄λ‹Ή μ§‘ν•©μ˜ μš”μ†Œμ˜ 총 개수λ₯Ό λ°˜ν™˜ν•¨.

     Object[] toArray()

     ν•΄λ‹Ή μ§‘ν•©μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό Object νƒ€μž…μ˜ λ°°μ—΄λ‘œ λ°˜ν™˜ν•¨.




    HashSet<E> 클래슀

    HashSet ν΄λž˜μŠ€λŠ” Set μ»¬λ ‰μ…˜ ν΄λž˜μŠ€μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” 클래슀 쀑 ν•˜λ‚˜. JDK 1.2λΆ€ν„° 제곡된 HashSet ν΄λž˜μŠ€λŠ” ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜(hash algorithm)을 μ‚¬μš©ν•˜μ—¬ 검색 속도가 맀우 λΉ λ₯΄λ‹€. μ΄λŸ¬ν•œ HashSet ν΄λž˜μŠ€λŠ” λ‚΄λΆ€μ μœΌλ‘œ HashMap μΈμŠ€ν„΄μŠ€λ₯Ό μ΄μš©ν•˜μ—¬ μš”μ†Œλ₯Ό μ €μž₯ν•œλ‹€. HashSet ν΄λž˜μŠ€λŠ” Set μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ―€λ‘œ, μš”μ†Œλ₯Ό μˆœμ„œμ— 상관없이 μ €μž₯ν•˜κ³  μ€‘λ³΅λœ 값은 μ €μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ§Œμ•½ μš”μ†Œμ˜ μ €μž₯ μˆœμ„œλ₯Ό μœ μ§€ν•΄μ•Ό ν•œλ‹€λ©΄ JDK 1.4λΆ€ν„° μ œκ³΅ν•˜λŠ” LinkedHashSet 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    HashSet<String> hs01 = new HashSet<String>();
    HashSet<String> hs02 = new HashSet<String>();
     
    // add() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μ €μž₯
    hs01.add("홍길동");
    hs01.add("μ΄μˆœμ‹ ");
    System.out.println(hs01.add("μž„κΊ½μ •"));
    System.out.println(hs01.add("μž„κΊ½μ •")); // μ€‘λ³΅λœ μš”μ†Œμ˜ μ €μž₯
     
    // Enhanced for λ¬Έκ³Ό get() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μΆœλ ₯
    for (String e : hs01) {
        System.out.print(e + " ");
    }
     
    // add() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μ €μž₯
    hs02.add("μž„κΊ½μ •");
    hs02.add("홍길동");
    hs02.add("μ΄μˆœμ‹ ");
     
    // iterator() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μΆœλ ₯
    Iterator<String> iter02 = hs02.iterator();
     
    while (iter02.hasNext()) {
        System.out.print(iter02.next() + " ");
    }
     
    // size() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μ΄ κ°œμˆ˜
    System.out.println("μ§‘ν•©μ˜ ν¬κΈ° : " + hs02.size());
    cs


    μ‹€ν–‰κ²°κ³Ό


    true

    false

    홍길동 μ΄μˆœμ‹  μž„κΊ½μ •

    홍길동 μ΄μˆœμ‹  μž„κΊ½μ •

    μ§‘ν•©μ˜ 크기 : 3


    μœ„μ˜ μ˜ˆμ œμ—μ„œ μš”μ†Œμ˜ μ €μž₯ μˆœμ„œλ₯Ό 바꿔도 μ €μž₯λ˜λŠ” μˆœμ„œμ—λŠ” 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠλŠ” 것을 확인할 수 μžˆλ‹€.


    λ˜ν•œ, add() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή HashSet에 이미 μ‘΄μž¬ν•˜λŠ” μš”μ†Œλ₯Ό μΆ”κ°€ν•˜λ €κ³  ν•˜λ©΄, ν•΄λ‹Ή μš”μ†Œλ₯Ό μ €μž₯ν•˜μ§€ μ•Šκ³  falseλ₯Ό λ°˜ν™˜ν•˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.


    μ΄λ•Œ ν•΄λ‹Ή HashSet에 이미 μ‘΄μž¬ν•˜λŠ” μš”μ†ŒμΈμ§€λ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‚΄λΆ€μ μœΌλ‘œ λ‹€μŒκ³Ό 같은 과정을 거치게 λœλ‹€.


    1. ν•΄λ‹Ή μš”μ†Œμ—μ„œ hashCode() λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ λ°˜ν™˜λœ ν•΄μ‹œκ°’μœΌλ‘œ 검색할 λ²”μœ„λ₯Ό κ²°μ •ν•œλ‹€.

    2. ν•΄λ‹Ή λ²”μœ„ λ‚΄μ˜ μš”μ†Œλ“€μ„ equals() λ©”μ†Œλ“œλ‘œ λΉ„κ΅ν•œλ‹€.


    λ”°λΌμ„œ HashSetμ—μ„œ add() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 쀑볡 없이 μƒˆλ‘œμš΄ μš”μ†Œλ₯Ό μΆ”κ°€ν•˜κΈ° μœ„ν•΄μ„œλŠ” hashCode()와 equals() λ©”μ†Œλ“œλ₯Ό 상황에 맞게 μ˜€λ²„λΌμ΄λ”©ν•΄μ•Ό ν•œλ‹€.


    μžλ°” API 링크

    Β· HashSet



    TreeSet<E> 클래슀

    TreeSetν΄λž˜μŠ€λŠ” 데이터가 μ •λ ¬λœ μƒνƒœλ‘œ μ €μž₯λ˜λŠ” 이진 검색 트리(binary search tree)의 ν˜•νƒœλ‘œ μš”μ†Œλ₯Ό μ €μž₯ν•œλ‹€. μ΄μ§„ 검색 νŠΈλ¦¬λŠ” 데이터λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•˜λŠ” λ“±μ˜ κΈ°λ³Έ λ™μž‘ μ‹œκ°„μ΄ 맀우 λΉ λ₯΄λ‹€. JDK 1.2λΆ€ν„° μ œκ³΅λ˜λŠ” TreeSet ν΄λž˜μŠ€λŠ” NavigableSet μΈν„°νŽ˜μ΄μŠ€λ₯Ό 기쑴의 이진 검색 트리의 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¨ λ ˆλ“œ-λΈ”λž™ 트리(Red-Black tree)둜 κ΅¬ν˜„ν•©λ‹ˆλ‹€. TreeSet ν΄λž˜μŠ€λŠ” Set μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ―€λ‘œ, μš”μ†Œλ₯Ό μˆœμ„œμ— 상관없이 μ €μž₯ν•˜κ³  μ€‘λ³΅λœ 값은 μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.

     


    TreeSet
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    TreeSet<Integer> ts = new TreeSet<Integer>();
     
    // add() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μ €μž₯
    ts.add(30);
    ts.add(40);
    ts.add(20);
    ts.add(10);
     
    // Enhanced for λ¬Έκ³Ό get() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μΆœλ ₯
    for (int e : ts) {
        System.out.print(e + " ");
    }
     
    // remove() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μ œκ±°
    ts.remove(40);
     
    // iterator() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μΆœλ ₯
    Iterator<Integer> iter = ts.iterator();
    while (iter.hasNext()) {
        System.out.print(iter.next() + " ");
    }
     
    // size() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ μš”μ†Œμ˜ μ΄ κ°œμˆ˜
    System.out.println("이진 κ²€μƒ‰ νŠΈλ¦¬μ˜ ν¬κΈ° : " + ts.size());
     
    // subSet() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ λΆ€λΆ„ μ§‘ν•©μ˜ μΆœλ ₯
    β‘  System.out.println(ts.subSet(1020));
    β‘‘ System.out.println(ts.subSet(10true20true));
    cs


    μ‹€ν–‰ κ²°κ³Ό


    10 20 30 40 

    10 20 30 

    이진 검색 트리의 크기 : 3

    [10]

    [10, 20]


    μœ„μ˜ 예제처럼 TreeSet μΈμŠ€ν„΄μŠ€μ— μ €μž₯λ˜λŠ” μš”μ†Œλ“€μ€ λͺ¨λ‘ μ •λ ¬λœ μƒνƒœλ‘œ μ €μž₯λœλ‹€.


    λ˜ν•œ, μœ„μ˜ μ˜ˆμ œμ—μ„œ μ‚¬μš©λœ subSet() λ©”μ†Œλ“œλŠ” TreeSet μΈμŠ€ν„΄μŠ€μ— μ €μž₯λ˜λŠ” μš”μ†Œκ°€ λͺ¨λ‘ μ •λ ¬λœ μƒνƒœμ΄κΈ°μ— λ™μž‘μ΄ κ°€λŠ₯ν•œ ν•΄λ‹Ή 트리의 λΆ€λΆ„ μ§‘ν•©λ§Œμ„ λ³΄μ—¬μ£ΌλŠ” λ©”μ†Œλ“œμž…λ‹ˆλ‹€.



    1
    2
    3
    1. public NavigableSet<E> subSet(E fromElement, E toElement)
     
    2. public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
    cs


    β‘ λ²ˆ λΌμΈμ—μ„œ μ‚¬μš©λœ subSet() λ©”μ†Œλ“œλŠ” 첫 번째 λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬λœ 값에 ν•΄λ‹Ήν•˜λŠ” μš”μ†ŒλΆ€ν„° μ‹œμž‘ν•˜μ—¬ 두 번째 λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬λœ 값에 ν•΄λ‹Ήν•˜λŠ” μš”μ†Œμ˜ λ°”λ‘œ 직전 μš”μ†ŒκΉŒμ§€λ₯Ό λ°˜ν™˜.


    β‘‘λ²ˆ λΌμΈμ—μ„œ μ‚¬μš©λœ subSet() λ©”μ†Œλ“œλŠ” 두 λ²ˆμ§Έμ™€ λ„€ 번째 λ§€κ°œλ³€μˆ˜λ‘œ 각각 첫 λ²ˆμ§Έμ™€ μ„Έ 번째 λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬λœ 값에 ν•΄λ‹Ήν•˜λŠ” μš”μ†Œλ₯Ό 포함할 것인지 μ•„λ‹Œμ§€λ₯Ό λͺ…μ‹œν•  수 μžˆλ‹€.


    즉, β‘‘λ²ˆ λΌμΈμ—μ„œ λ„€ 번째 λ§€κ°œλ³€μˆ˜λ₯Ό false둜 λ³€κ²½ν•˜λ©΄ 20을 ν¬ν•¨ν•˜μ§€ μ•Šκ²Œ λ˜λ―€λ‘œ, β‘ λ²ˆ 라인과 같은 κ²°κ³Όλ₯Ό 좜λ ₯ν•  것이닀.


    JAVA API 링크

    Β· TreeSet




    μ»¬λ ‰μ…˜ 클래슀 정리 & μš”μ•½

    각 μ»¬λ ‰μ…˜ ν΄λž˜μŠ€λ§ˆλ‹€ μž₯단점이 μžˆμœΌλ―€λ‘œ κ΅¬ν˜„μ›λ¦¬μ™€ νŠΉμ§•μ„ 잘 μ΄ν•΄ν•΄μ„œ 상황에 κ°€μž₯ μ ν•©ν•œ 것을 μ„ νƒν•˜μ—¬ μ‚¬μš©ν•˜λŠ”κ²ƒμ΄ λ°”λžŒμ§ν•˜λ‹€.




     μ»¬λ ‰μ…˜

    νŠΉμ§• 

    ArrayList 

    λ°°μ—΄ 기반, λ°μ΄ν„°μ˜ 좔가와 μ‚­μ œμ— 뢈리, 순차적인 μΆ”κ°€μ‚­μ œλŠ” 제일 빠름. 

    μž„μ˜μ˜ μš”μ†Œμ— λŒ€ν•œ 접근성이 뛰어남. 

    LinkedList 

    μ—°κ²°κΈ°λ°˜, λ°μ΄ν„°μ˜ 좔가와 μ‚­μ œμ— 유리, μž„μ˜μ΄ μš”μ†Œμ— λŒ€ν•œ 접근성이 쒋지 μ•Šλ‹€.

    HashMap 

    λ°°μ—΄κ³Ό 연결이 κ²°ν•©λœ ν˜•νƒœ, μΆ”κ°€, μ‚­μ œ, 검색, 접근성이 λͺ¨λ‘ 뛰어남. κ²€μƒ‰μ—λŠ” 졜고.

    TreeMap

     μ—°κ²°κΈ°λ°˜, μ •λ ¬κ³Ό 검색(특히 λ²”μœ„κ²€μƒ‰)에 적합. 검색 μ„±λŠ₯은 HashMap보닀 떨어짐

    Stack 

    Vectorλ₯Ό 상속받아 κ΅¬ν˜„ 

    Queue 

    LinkedListκ°€ QueueμΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„

    Properties 

    Hashtable을 상속받아 κ΅¬ν˜„ 

    HashSet 

    HashMap을 μ΄μš©ν•΄μ„œ κ΅¬ν˜„ 

    TreeSet 

    TreeMap을 μ΄μš©ν•΄μ„œ κ΅¬ν˜„ 

    LinkedHashMap
    LinkedHashSet 

    HashMapκ³Ό HashSet에 μ €μž₯μˆœμ„œμœ μ§€κΈ°λŠ₯을 μΆ”κ°€ν•˜μ˜€μŒ. 



    μ°Έμ‘° : TCPSchool

    μžλ°”μ˜ 정석

    λ°˜μ‘ν˜•