ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Set, Queue, Map
    ๊ฐœ๋ฐœ/Java 2022. 4. 19. 00:38

     

     

     

     

     

     

    Set


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

    ์ž๋ฐ”์—์„œ Set์„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์ฃผ์š” ํด๋ž˜์Šค๋Š” HashSet, TreeSet, LinkedHashSet์ด ์žˆ๋‹ค. 

    - HashSet : ์ˆœ์„œ๊ฐ€ ์ „ํ˜€ ํ•„์š” ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œ ํ…Œ์ด๋ธ”(hash table)์— ์ €์žฅํ•œ๋‹ค. Set ์ค‘์— ๊ฐ€์žฅ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค.
    - TreeSet : ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์— ๋”ฐ๋ผ์„œ ์ •๋ ฌ๋˜๋Š” ์…‹์ด๋‹ค. red-black์ด๋ผ๋Š” ํŠธ๋ฆฌ(tree) ํƒ€์ž…์œผ๋กœ ๊ฐ’์ด ์ €์žฅ๋˜๋ฉฐ, HashSet ๋ณด๋‹ค ์•ฝ๊ฐ„ ์„ฑ๋Šฅ์ด ๋Š๋ฆฌ๋‹ค.
    - LinkedHashSet : ์—ฐ๊ฒฐ๋œ ๋ชฉ๋ก ํƒ€์ž…์œผ๋กœ ๊ตฌํ˜„๋œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ €์žฅ๋œ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ๊ฐ’์ด ์ •๋ ฌ๋œ๋‹ค. ๋Œ€์‹  ์„ฑ๋Šฅ์ด ์ด ์…‹ ์ค‘์—์„œ ๊ฐ€์žฅ ๋‚˜์˜๋‹ค.

     

    ์ด๋Ÿฌํ•œ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ ์ •๋ ฌ ๋•Œ๋ฌธ์ด๋‹ค. HashSet์€ ๋ณ„๋„์˜ ์ •๋ ฌ ์ž‘์—…์ด ์—†์–ด ์ œ์ผ ๋น ๋ฅด๋‹ค.

     

    red-black ํŠธ๋ฆฌ๋Š” ๊ฐ ๋…ธ๋“œ์˜ ์ƒ‰์„ ๋ถ‰์€ ์ƒ‰ ํ˜น์€ ๊ฒ€์€ ์ƒ‰์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ณ , ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์˜ ์ด์ง„(binary) ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค.

     

    http://ko.wikipedia.org/wiki/๋ ˆ๋“œ-๋ธ”๋ž™_ํŠธ๋ฆฌ

     

    HashSet 

    java.lang.Object
      ใ„ด java.util.AbstractCollection<E>
        ใ„ด java.util.AbstractSet<E>
          ใ„ด java.util.HashSet<E>

    AbstractCollection์„ ํ™•์žฅํ•œ ๊ฒƒ์€ ArrayList์™€ ๋™์ผํ•˜๋‹ค. ํ•˜์ง€๋งŒ, HashSet์€ AbstractSet์„ ํ™•์žฅํ–ˆ๋‹ค. AbstractSet ํด๋ž˜์Šค๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ abstract ํด๋ž˜์Šค์ด๋‹ค. ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋Š” Object ํด๋ž˜์Šค์— ์„ ์–ธ๋˜์–ด ์žˆ๋Š” equals(), hashCode() ๋ฉ”์†Œ๋“œ์™€ ์ด ํด๋ž˜์Šค์—์„œ ์ถ”๊ฐ€ํ•œ removeAll() ๋ฟ์ด๋‹ค.

    Set์€ ๋ฌด์—‡๋ณด๋‹ค๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์€์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์ž‘์—…์€ Set์˜ ํ•ต์‹ฌ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ , equals() ๋ฉ”์†Œ๋“œ๋Š” hashCode() ๋ฉ”์†Œ๋“œ์™€ ๋–จ์–ด์งˆ ์ˆ˜ ์—†๋Š” ๋ถˆ๊ฐ€๋ถ„์˜ ๊ด€๊ณ„์ด๋‹ค. ๋”ฐ๋ผ์„œ, equals()์™€ hashCode() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ถ€๋ถ„์€ Set์—์„œ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. ์ถ”๊ฐ€๋กœ removeAll() ๋ฉ”์†Œ๋“œ๋Š” ์ปฌ๋ ‰์…˜์„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„, ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ปฌ๋ ‰์…˜์— ํฌํ•จ๋œ ๋ณด์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šธ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

     

    HashSet์ด ์–ด๋–ค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ๋ณด์ž.

     

    ์ธํ„ฐํŽ˜์ด์Šค ์šฉ๋„
    Serializable ์›๊ฒฉ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜, ํŒŒ์ผ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ์„ ์ง€์ •
    Cloneable Object ํด๋ž˜์Šค์˜ clone() ๋ฉ”์†Œ๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์Œ์„ ์ง€์ •. ์ฆ‰, ๋ณต์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์ž„์„ ์˜๋ฏธํ•œ๋‹ค.
    Iterable<E> ๊ฐ์ฒด๊ฐ€ "foreach" ๋ฌธ์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ์ง€์ •
    Collection<E> ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋‹ด์•„ ์ฒ˜๋ฆฌํ•  ๋•Œ์˜ ๋ฉ”์†Œ๋“œ ์ง€์ •
    Set<E> ์…‹ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์— ๊ด€๋ จ๋œ ๋ฉ”์†Œ๋“œ ์ง€์ •

     

    ๐Ÿ’กList์—๋Š” ์ •์˜๋˜์–ด ์žˆ์ง€๋งŒ, Set์—๋Š” ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š๋Š” ๋ฉ”์†Œ๋“œ๋Š” ์–ด๋–ค ๊ฒƒ์ด ์žˆ์„๊นŒ?

    Set์€ ์ˆœ์„œ๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ, ์ˆœ์„œ๊ฐ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋ฉ”์†Œ๋“œ๋‚˜, ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜์™€ ๊ด€๋ จ๋œ ๋ฉ”์†Œ๋“œ๋Š” Set ์ธํ„ฐํŽ˜์ด์Šค์—์„œ๋Š” ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ get(int index)๋‚˜ indexOf(Object o)์™€ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋“ค์€ Set์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. 

    ๐Ÿ’กHastSet์˜ ์ƒ์„ฑ์ž์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋กœ๋“œ ํŒฉํ„ฐ(load factor)๋ผ๋Š” ๊ฒƒ์€ ๋ญ˜๊นŒ?

    ๋กœ๋“œ ํŒฉํ„ฐ๋Š” (๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜) / (์ €์žฅ ๊ณต๊ฐ„)์„ ์˜๋ฏธํ•œ๋‹ค. ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜์—ฌ ๋กœ๋“œ ํŒฉํ„ฐ๋ณด๋‹ค ์ปค์ง€๋ฉด, ์ €์žฅ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๋Š” ์ฆ๊ฐ€๋˜๊ณ  ํ•ด์‹œ ์žฌ์ •๋ฆฌ ์ž‘์—…(refresh)์„ ํ•ด์•ผ ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ด์‹œ ์žฌ์ •๋ฆฌ ์ž‘์—…์— ๋“ค์–ด๊ฐ€๋ฉด, ๋‚ด๋ถ€์— ๊ฐ–๊ณ  ์žˆ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์ด ๋ฐœ์ƒํ•œ๋‹ค.

    ๋กœ๋“œ ํŒฉํ„ฐ๋ผ๋Š” ๊ฐ’์ด ํด์ˆ˜๋ก ๊ณต๊ฐ„์€ ๋„‰๋„‰ํ•ด์ง€์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ์‹œ๊ฐ„์€ ์ฆ๊ฐ€ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ดˆ๊ธฐ ๊ณต๊ฐ„ ๊ฐœ์ˆ˜์™€ ๋กœ๋“œ ํŒฉํ„ฐ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์‚ฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ดˆ๊ธฐ ํฌ๊ธฐ๊ฐ€ (๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜) / (๋กœ๋“œ ํŒฉํ„ฐ) ๋ณด๋‹ค ํด ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•œ ํ•ด์‹œ ์žฌ์ •๋ฆฌ ์ž‘์—…์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๊ธฐ์— ๋‹ด์•„ ์ฒ˜๋ฆฌํ•  ๋•Œ์—๋Š” ์ดˆ๊ธฐ ํฌ๊ธฐ์™€ ๋กœ๋“œ ํŒฉํ„ฐ์˜ ๊ฐ’์„ ์กฐ์ ˆํ•ด ๊ฐ€๋ฉด์„œ ๊ฐ€์žฅ ์ ์ ˆํ•œ ํฌ๊ธฐ๋ฅผ ์ฐพ์•„์•ผ๋งŒ ํ•œ๋‹ค.

     

     

    Queue


    LinkedList๋Š” List ์ธํ„ฐํŽ˜์ด์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Queue์™€ Deque ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. ์ฆ‰, LinkedList ์ž์ฒด๊ฐ€ List์ด๋ฉด์„œ๋„ Queue, Deque๋„ ๋œ๋‹ค.

     

    ํ๋Š” FIFO์˜ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค. First In First Out์˜ ์•ฝ์ž๋กœ ๋จผ์ € ๋“ค์–ด์˜จ ์• ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

    ๋˜ํ•œ Java 6์—์„œ ์ถ”๊ฐ€๋œ Deque๋Š” "Double Ended Queue"์˜ ์•ฝ์ž์ด๋‹ค. Deque๋Š” Queue ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์—, Queue์˜ ๊ธฐ๋Šฅ์„ ์ „๋ถ€ ํฌํ•จํ•œ๋‹ค. ๋Œ€์‹ , ๋งจ ์•ž์— ๊ฐ’์„ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๋Š” ์ž‘์—…, ๋งจ ๋’ค์— ๊ฐ’์„ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์šฉ์ดํ•˜๋„๋ก ๋˜์–ด ์žˆ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

     

    ๐Ÿ’กLinkedList๋Š” ์™œ ์“ฐ๋Š” ๊ฒƒ์ผ๊นŒ?

    ๋งŒ์•ฝ, ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐ์—ด๊ณผ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ๋บ„ ๊ฒฝ์šฐ์—๋Š” ๋ณ„ ํ•„์š”๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์†์ ์œผ๋กœ ์‚ญ์ œ๋˜๊ณ , ์ถ”๊ฐ€๋  ๊ฒฝ์šฐ์—๋Š” LinkedList๊ฐ€ ๋ฐฐ์—ด๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ธก๋ฉด์—์„œ ํ›จ์”ฌ ์œ ๋ฆฌํ•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ArrayList์™€ Vector๋Š” ๊ฐ ์œ„์น˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ณ , ๊ทธ ์œ„์น˜๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ๋งจ ์•ž์˜ ๊ฐ’์„ ์‚ญ์ œํ•˜๋ฉด, ๊ทธ ๋’ค์— ์žˆ๋Š” ๊ฐ’๋“ค์€ ํ•˜๋‚˜์”ฉ ์•ž์œผ๋กœ ์œ„์น˜๋ฅผ ์ด๋™ํ•ด์•ผ ์ œ๋Œ€๋กœ ๋œ ์œ„์น˜์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๊ทธ์— ๋ฐ˜ํ•ด LinkedList๋Š” ์ค‘๊ฐ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋ฉด, ์ง€์šด ๋ฐ์ดํ„ฐ์˜ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋’ค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ๊ทธ๋งŒ์ด๋‹ค. ์œ„์น˜๋ฅผ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๊ฐ’์„ ์ด๋™ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๋œป์ด๋‹ค.

    LinkedList๋ฅผ ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๋ ค๋ฉด ์—ด์ฐจ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

    LinkedList์—์„œ๋Š” ์•ž์— ์žˆ๋Š” ์• ์™€ ๋’ค์— ์žˆ๋Š” ์• ๋งŒ ๊ธฐ์–ตํ•˜๋ฉด๋œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด์„œ, 10์€ ๋’ค์— ์žˆ๋Š” ๊ฐ’์ด 20์ด๋ผ๋Š” ๊ฒƒ๋งŒ ์•Œ๊ณ , 30์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ƒ๊ฐ๋„ ์•ˆํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  30์ด๋ผ๋Š” ์• ๋„ ์•ž์— 20์ด๋ผ๋Š” ๊ฒƒ๋งŒ ๊ธฐ์–ตํ•œ๋‹ค.

     

    LinkedList

    java.lang.Object
      ใ„ด java.util.AbstractCollection<E>
        ใ„ด java.util.AbstractList<E>
          ใ„ด java.util.AbstractSequentialList<E>
            ใ„ด java.java.util.LinkedList<E>

     

    ArrayList ํด๋ž˜์Šค๋‚˜ Vector ํด๋ž˜์Šค์™€ ์ƒ์†๊ด€๊ณ„๋Š” ๋น„์Šทํ•˜์ง€๋งŒ, AbstractSequentialList๊ฐ€ ๋ถ€๋ชจ์ธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. AbstractList์™€ AbstractSequentialList์˜ ์ฐจ์ด์ ์€ add(), set(), remove() ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ๊ตฌํ˜„ ๋‚ด์šฉ์ด ์ƒ์ดํ•˜๋‹ค๋Š” ์ •๋„๋‹ค.

     

    LinkedList ํด๋ž˜์Šค๊ฐ€ ๊ตฌํ˜„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชฉ๋ก์„ ์‚ดํŽด๋ณด์ž.

     

    ์ธํ„ฐํŽ˜์ด์Šค ์šฉ๋„
    Serializable ์›๊ฒฉ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜, ํŒŒ์ผ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ์„ ์ง€์ •
    Cloneable Object ํด๋ž˜์Šค์˜ clone() ๋ฉ”์†Œ๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์Œ์„ ์ง€์ •. ์ฆ‰, ๋ณต์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์ž„์„ ์˜๋ฏธํ•œ๋‹ค.
    Iterable<E> ๊ฐ์ฒด๊ฐ€ "foreach" ๋ฌธ์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ์ง€์ •
    Collection<E> ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋‹ด์•„ ์ฒ˜๋ฆฌํ•  ๋•Œ์˜ ๋ฉ”์†Œ๋“œ ์ง€์ •
    Deque<E> ๋งจ ์•ž๊ณผ ๋งจ ๋’ค์˜ ๊ฐ’์„ ์šฉ์ดํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ํ์™€ ๊ด€๋ จ๋œ ๋ฉ”์†Œ๋“œ ์ง€์ •
    List<E> ๋ชฉ๋กํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ๋ฉ”์†Œ๋“œ ์ง€์ •
    Queue<E> ํ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ๋ฉ”์†Œ๋“œ ์ง€์ •

     

    Map


    ์ž๋ฐ”์—์„œ์˜ Map์€ ํ‚ค(Key)์™€ ๊ฐ’(Value)์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ž๋ฐ”์˜ Map์€ ํ‚ค์™€ ๊ฐ’์ด 1:1๋กœ ์ง€์ •๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ด ํ‚ค๋Š” ํ•ด๋‹น Map์—์„œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค. ๋งŒ์•ฝ ํ‚ค๊ฐ€ ๋‹ค๋ฅด๊ณ , ๊ฐ’์ด ๋™์ผํ•˜๋‹ค๋ฉด ๋งต์—์„œ๋Š” ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

    ์ด์ฒ˜๋Ÿผ Map์€,

    1. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ํ‚ค์™€ ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค.
    2. ํ‚ค๊ฐ€ ์—†์ด ๊ฐ’๋งŒ ์ €์žฅ๋  ์ˆ˜๋Š” ์—†๋‹ค.
    3. ๊ฐ’ ์—†์ด ํ‚ค๋งŒ ์ €์žฅ๋  ์ˆ˜๋„ ์—†๋‹ค.
    4. ํ‚ค๋Š” ํ•ด๋‹น Map์—์„œ ๊ณ ์œ ํ•ด์•ผ๋งŒ ํ•œ๋‹ค.
    5. ๊ฐ’์€ ํ•ด๋‹น Map์—์„œ ์ค‘๋ณต๋˜์–ด๋„ ์ „ํ˜€ ์ƒ๊ด€ ์—†๋‹ค.

     

    Map์€ java.util ํŒจํ‚ค์ง€์˜ Map์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๊ณ , ๊ตฌํ˜„ํ•ด ๋†“์€ ํด๋ž˜์Šค๋“ค๋„ ๋งŽ์ด ์žˆ๋‹ค.

    Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค์€ ๋งค์šฐ ๋‹ค์–‘ํ•˜๊ณ  ๋งŽ๋‹ค. ๊ทธ ์ค‘์—์„œ HashMap, TreeMap, LinkedHashMap ๋“ฑ์ด ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๊ณ , ๊ฐœ๋ฐœ์ž๋“ค์ด ์• ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋‹ค. ๊ทธ๋ฆฌ๊ณ , Hashtable์ด๋ผ๋Š” ํด๋ž˜์Šค๋„ ์žˆ๋‹ค.

     

    Hashtable


    Hashtable ํด๋ž˜์Šค๋Š” Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์ธ Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค.

    ์ด ๋‘ ์ข…๋ฅ˜์˜ ๋‹ค๋ฅธ ์ ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    - Map์€ ์ปฌ๋ ‰์…˜ ๋ทฐ(Collection View)๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, Hashtable์€ Enumeration๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    - Map์€ ํ‚ค, ๊ฐ’, ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํ™˜ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, HashTable์€ ์ด ์ค‘์—์„œ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํ™˜ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    - Map์€ ์ดํ„ฐ๋ ˆ์ด์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋„์ค‘์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€๋งŒ, HashTable์€ ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

     

    ๊ทธ๋Ÿฐ๋ฐ, HashMap ํด๋ž˜์Šค์™€ Hashtable ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

     

    ๊ธฐ๋Šฅ HashMap Hashtable
    ํ‚ค๋‚˜ ๊ฐ’์— null ์ €์žฅ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ
    ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ ์•ˆ์ „ ์—ฌ๋ถ€ ๋ถˆ๊ฐ€๋Šฅ ๊ฐ€๋Šฅ

     

    ํŠนํžˆ, Hashtable์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ Map์œผ๋กœ ๋๋‚˜๋Š” ํด๋ž˜์Šค๋“ค์€ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ๋™์‹œ์— ์ ‘๊ทผํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•œ๋‹ค.

    Map m = Collections.synchronizedMap(new HashMap(...));

     

    ์ถ”๊ฐ€๋กœ, ์ž๋ฐ” ๊ธฐ๋ณธ API ์ค‘์—์„œ JDK 1.0๋ถ€ํ„ฐ ์ œ๊ณต๋˜๋Š” Hashtable, Vector๋Š” ํด๋ž˜์Šค๊ฐ€ ์“ฐ๋ ˆ๋“œ์— ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐœ๋ฐœ๋˜์–ด ์žˆ๋‹ค. ๊ทธ ์™ธ์˜ JDK 1.2๋ถ€ํ„ฐ ์ œ๊ณต๋˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ Collection ๊ด€๋ จ ํด๋ž˜์Šค๋“ค์€ ์ด์™€ ๊ฐ™์€ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ์ด๋ฆ„์— Concurrent๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ๋งŒ ์“ฐ๋ ˆ๋“œ์— ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์ด๋Ÿฌํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ํด๋ž˜์Šค์˜ API์—๋Š” ๋ฐ˜๋“œ์‹œ ๊ด€๋ จ๋œ ์„ค๋ช…์ด ์ œ๊ณต๋˜๋ฏ€๋กœ API๋ฅผ ์ฐธ๊ณ ํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด๋„๋ก ํ•˜์ž. (์˜ˆ๋ฅผ ๋“ค๋ฉด JDK 1.5์— ์ถ”๊ฐ€๋œ ConcurrentHashMap, ConpyWriteArrayList ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, java.util.concurrent ํŒจํ‚ค์ง€ ์†Œ์†์ด๋‹ค)

     

    HashMap

    HashMap

    java.lang.Object
      ใ„ด java.util.AbstractMap<K, V>
        ใ„ด java.util.HashMap<K, V>

    HashMap ํด๋ž˜์Šค๋Š” AbstractMap์ด๋ผ๋Š” Abstract ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ–ˆ์œผ๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ์ฃผ์š” ๋ฉ”์†Œ๋“œ๋Š” AbstratctMap ํด๋ž˜์Šค๊ฐ€ ๊ตฌํ˜„ํ•ด ๋†“์•˜๋‹ค.

     

    ์–ด๋–ค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž.

    ์ธํ„ฐํŽ˜์ด์Šค ์šฉ๋„
    Serializable ์›๊ฒฉ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜, ํŒŒ์ผ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ์„ ์ง€์ •
    Cloneable Object ํด๋ž˜์Šค์˜ clone() ๋ฉ”์†Œ๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์Œ์„ ์ง€์ •. ์ฆ‰, ๋ณต์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์ž„์„ ์˜๋ฏธํ•œ๋‹ค.
    Map<E> ๋งต์˜ ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ ์ง€์ •

     

    TreeMap

    ๋งŒ์•ฝ HashMap ๊ฐ์ฒด์˜ ํ‚ค๋ฅผ ์ •๋ ฌํ•˜๋ ค๋ฉด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” TreeMap์ด๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ์ €์žฅํ•˜๋ฉด์„œ, ํ‚ค๋ฅผ ์ •๋ ฌํ•œ๋‹ค. ์ •๋ ฌ๋˜๋Š” ๊ธฐ๋ณธ ์ˆœ์„œ๋Š” "์ˆซ์ž > ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž > ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž > ํ•œ๊ธ€" ์ˆœ์ด๋‹ค. ์ด ์ˆœ์„œ๋Š” String๊ณผ ๊ฐ™์€ ๋ฌธ์ž์—ด์ด ์ €์žฅ๋˜๋Š” ์ˆœ์„œ๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    ์ฆ‰, TreeMap์€ ํ‚ค๋ฅผ ์ •๋ ฌํ•˜์—ฌ ์ €์žฅํ•˜๊ณ , ํ‚ค์˜ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์™€์„œ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ์ •๋ ฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ œ๊ณต๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋งค์šฐ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ TreeMap์„ ์ด์šฉํ•˜์—ฌ ๋ณด๊ด€ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ๋•Œ์—๋Š” HashMap๋ณด๋‹ค๋Š” ๋Š๋ฆด ๊ฒƒ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ํ‚ค๊ฐ€ ์ •๋ ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ, 100๊ฑด, 1,000๊ฑด ์ •๋„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ •๋ ฌ์„ ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋ฉด, HashMap ๋ณด๋‹ค๋Š” TreeMap์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ๋ฆฌํ•˜๋‹ค.

    ์ด๋ ‡๊ฒŒ, TreeMap์ด ํ‚ค๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์€ SortedMap์ด๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. SortedMap์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค์€ ๋ชจ๋‘ ํ‚ค๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ๋งŒ ํ•œ๋‹ค. ํ‚ค๊ฐ€ ์ •๋ ฌ์ด ๋˜์—ˆ์„ ๋•Œ์˜ ์žฅ์ ์€, ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ํ‚ค(firstKey()), ๊ฐ€์žฅ ๋’ค์— ์žˆ๋Š” ํ‚ค(lastKey()), ํŠน์ • ํ‚ค ๋’ค์— ์žˆ๋Š” ํ‚ค(highterKey()), ํŠน์ • ํ‚ค ์•ž์— ์žˆ๋Š” ํ‚ค(lowerKey()) ๋“ฑ์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ด ์ค€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

     

     

     

    ๋Œ“๊ธ€

Designed by Tistory.