๐™Ž๐™š๐™ฉ ๐˜พ๐™ค๐™ก๐™ก๐™š๐™˜๐™ฉ๐™ž๐™ค๐™ฃ ๐˜พ๐™ก๐™–๐™จ๐™จ

uuuouuoยท2022๋…„ 7์›” 18์ผ
0
post-thumbnail

๐Ÿ“– Set ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค


  • Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋ชจ๋“  Set ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค์˜ ํŠน์ง•

    1. ์š”์†Œ์˜ ์ €์žฅ ์ˆœ์„œ ์œ ์ง€ํ•˜์ง€ ์•Š์Œ
    2. ๊ฐ™์€ ์š”์†Œ์˜ ์ค‘๋ณต ์ €์žฅ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ
  • ๋Œ€ํ‘œ์ ์ธ Set ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค
    1. HashSet
    2. TreeSet

๐Ÿ’ฌ HashSet< E > ํด๋ž˜์Šค


  • HashSet ํด๋ž˜์Šค๋Š” Set ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜
  • JDK 1.2๋ถ€ํ„ฐ ์ œ๊ณต๋œ HashSet ํด๋ž˜์Šค๋Š” ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜(hash algorithm)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ„
  • ๋‚ด๋ถ€์ ์œผ๋กœ HashMap ์ธ์Šคํ„ด์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์š”์†Œ ์ €์žฅ
  • ์š”์†Œ๋ฅผ ์ €์žฅ ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋˜์ง€ ์•Š๊ณ  ์ค‘๋ณต ๊ฐ’์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ
  • null ํ—ˆ์šฉ
  • ์‹œ๊ฐ„๋ณต์žก๋„
    • add : O(1)
    • contains : O(1)
    • next : O(h/n) (h๋Š” ํ…Œ์ด๋ธ” ์šฉ๋Ÿ‰)

โ—พ HashSetย ๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ๋ช…์„ค๋ช…
booleanย add(E o)์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ๋„˜์–ด์˜จ ๊ฐ์ฒด๊ฐ€ย Set๊ตฌ์กฐ์— ์—†๋‹ค๋ฉด ์ถ”๊ฐ€ํ•˜๊ณ ย true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
booleanย addAll(Collection c)์ฃผ์–ด์ง„ ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋œ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.(ํ•ฉ์ง‘ํ•ฉ)
voidย clear( )Set๊ตฌ์กฐ์— ์žˆ๋Š” ๋ชจ๋“  ์š”์†Œ๋“ค์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
Object clone()HashSet์„ ๋ณต์ œํ•ด์„œ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.(์–•์€ ๋ณต์‚ฌ)
booleanย contains(Object o)์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๊ฐ์ฒด๋ฅผ ํ˜„ย Collection์—์„œ ์š”์†Œ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉดย true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
booleanย containsAll(Collection c)์ฃผ์–ด์ง„ ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋œ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
booleanย isEmpty( )ํ˜„ย Collection์— ์ €์žฅ๋œ ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉดย true๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Iterator< E > iterator( )ํ˜„ย Setย ๊ตฌ์กฐ์˜ ์š”์†Œ๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ดย Iterator๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
booleanย remove(Object o)ํ˜„ย Setย ๊ตฌ์กฐ์—์„œ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.ย ์ด๋•Œ ์‚ญ์ œ์— ์„ฑ๊ณตํ•˜๋ฉดย true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
booleanย removeAll(Collection c)์ฃผ์–ด์ง„ ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋œ ๋ชจ๋“  ๊ฐ์ฒด์™€ ๋™์ผํ•œ ๊ฒƒ๋“ค์„ย HashSet์—์„œ ๋ชจ๋‘ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.(์ฐจ์ง‘ํ•ฉ)
intย size( )ํ˜„ย Set๊ตฌ์กฐ์— ์ €์žฅ๋œย ์š”์†Œ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Object[] toArray()์ €์žฅ๋œ ๊ฐ์ฒด๋“ค์„ ๊ฐ์ฒด๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Object[] toArray(Object[] a)์ €์žฅ๋œ ๊ฐ์ฒด๋“ค์„ ์ฃผ์–ด์ง„ ๊ฐ์ฒด๋ฐฐ์—ด(a)์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ฌ TreeSet< E > ํด๋ž˜์Šค


  • TreeSet ํด๋ž˜์Šค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ €์žฅ๋˜๋Š” ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ(binary search tree)์˜ ํ˜•ํƒœ๋กœ ์š”์†Œ๋ฅผ ์ €์žฅ

  • ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋Š” ๋“ฑ์˜ ๊ธฐ๋ณธ ๋™์ž‘ ์‹œ๊ฐ„์ด ๋งค์šฐ ๋น ๋ฆ„

  • JDK 1.2๋ถ€ํ„ฐ ์ œ๊ณต๋˜๋Š” TreeSet ํด๋ž˜์Šค๋Š” NavigableSet ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ์กด์˜ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ(Red-Black tree)๋กœ ๊ตฌํ˜„

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

  • HashSet๋ณด๋‹ค ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€/์‚ญ์ œ๋Š” ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฌ์ง€๋งŒ ๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ์—๋Š” ์œ ๋ฆฌ

    • ์‚ฝ์ž…๊ณผ ๋™์‹œ์— ์ •๋ ฌ ์ƒํƒœ ์œ ์ง€
  • ๋‹ค์–‘ํ•œ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ

  • ์‹œ๊ฐ„๋ณต์žก๋„

    • add : O(log n)
    • contains : O(log n)
    • next : O(long n)

โ—พ TreeSet์˜ ์ฃผ์š” ๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ์„ค๋ช…
booleanย add(Object o)์ง€์ •๋œ ๊ฐ์ฒด(o)์˜ ๊ฐ์ฒด๋“ค์„ย Collection์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
booleanย addAll(Collection c)์ง€์ •๋œย Collection(c)์˜ ๊ฐ์ฒด๋“ค์„ย Collection์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
Object ceiling(Object o)์ง€์ •๋œ ๊ฐ์ฒด์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์—†์œผ๋ฉด ํฐ ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฒด ์ค‘ ์ œ์ผ ๊ฐ€๊นŒ์šด ๊ฐ’์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.ย ์—†์œผ๋ฉดย null
voidย clear()์ €์žฅ๋œ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
Object clone()TreeSet์„ ๋ณต์ œํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Comparator comparator()TreeSet์˜ ์ •๋ ฌ๊ธฐ์ค€(Comparator)๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
booleanย contains(Object o)์ง€์ •๋œ ๊ฐ์ฒด(o)์˜ ๊ฐ์ฒด๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
booleanย containsAll(Collection c)์ง€์ •๋œย Collection์˜ ๊ฐ์ฒด๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
NavigableSet descendingSet()TreeSet์— ์ €์žฅ๋œ ์š”์†Œ๋“ค์„ ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์„œ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Object first()์ •๋ ฌ๋œ ์ˆœ์„œ์—์„œ ์ฒซ ๋ฒˆ์งธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Object floor(Object o)์ง€์ •๋œ ๊ฐ์ฒด์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.์—†์œผ๋ฉด ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฒด ์ค‘ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ’์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.ย ์—†์œผ๋ฉดย null
SortedSet headSet(Object toElement)์ง€์ •๋œ ๊ฐ์ฒด๋ณด๋‹ค ์ž‘์€ ๊ฐ’์˜ ๊ฐ์ฒด๋“ค์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
NavigableSet headSet(Object toElement, boolean inclusive)์ง€์ •๋œ ๊ฐ์ฒด๋ณด๋‹ค ์ž‘์€ ๊ฐ’์œผ ๊ฐ์ฒด๋“ค์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. inclusive๊ฐ€ย true์ด๋ฉด ๊ฐ™์€ ๊ฐ’์˜ ๊ฐ์ฒด๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
Object higher(Object o)์ง€์ •๋œ ๊ฐ์ฒด๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฒด ์ค‘ ์ œ์ผ ๊ฐ€๊นŒ์šด ๊ฐ’์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.ย ์—†์œผ๋ฉดย null
booleanย isEmpty()TreeSet์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
Iterator iterator()TreeSet์˜ย Iterator๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Object last()์ •๋ ฌ๋œ ์ˆœ์„œ์—์„œ ๋งˆ์ง€๋ง‰ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Object lower(Object o)์ง€์ •๋œ ๊ฐ์ฒด๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฒด ์ค‘ ์ œ์ผ ๊ฐ€๊นŒ์šด ๊ฐ’์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.ย ์—†์œผ๋ฉดย null
Object pollFirst()TreeSet์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ(์ œ์ผ ์ž‘์€ ๊ฐ’์˜ ๊ฐ์ฒด)๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Object pollLast()TreeSet์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ(์ œ์ผ ํฐ ๊ฐ’์˜ ๊ฐ์ฒด)๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
booleanย remove(Object o)์ง€์ •๋œ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
booleanย retainAll(Collection c)์ฃผ์–ด์ง„ ์ปฌ๋ ‰์…˜๊ณผ ๊ณตํ†ต๋œ ์š”์†Œ๋งŒ์„ ๋‚จ๊ธฐ๊ณ  ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.(๊ต์ง‘ํ•ฉ)
intย size()์ €์žฅ๋œ ๊ฐ์ฒด์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Spliterator spliterator()TreeSet์˜ย spliterator๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
SortedSet subSet(Object frontElement, Object toElement)๋ฒ”์œ„๊ฒ€์ƒ‰(fromElement์™€ย toElement์‚ฌ์ด)์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ ๋ฒ”์œ„์ธย toElement๋Š” ๋ฒ”์œ„์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
NavigableSet< E > subSet(E fromElement,ย booleanย fromInclusive, E toElement, booleantoInclusive)๋ฒ”์œ„๊ฒ€์ƒ‰(fromElement์™€ย toElement์‚ฌ์ด)์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.fromInclusive๊ฐ€ย true์ด๋ฉด ์‹œ์ž‘๊ฐ’์ด ํฌํ•จ๋˜๊ณ , toInclusive๊ฐ€ย true์ด๋ฉด ๋๊ฐ’์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
SortedSet tailSet(Object fromElement)์ง€์ •๋œ ๊ฐ์ฒด๋ณด๋‹ค ํฐ ๊ฐ’์˜ ๊ฐ์ฒด๋“ค์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Object[] toArray()์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Object[] toArray(Object[] a)์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ์ฃผ์–ด์ง„ ๊ฐ์ฒด๋ฐฐ์—ด์— ์ €์žฅํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€