Post

πŸ’š 자료ꡬ쑰 - List와 Set의 차이점

List

  1. 같은 μ’…λ₯˜μ˜ μ•„μ΄ν…œμ„ μ €μž₯

  2. μˆœμ„œλ₯Ό 보μž₯, 쀑볡을 ν—ˆμš©

  • 2000~ 2024λ…„κΉŒμ§€ μ—°μ˜ˆ λŒ€μƒμ„ μˆ˜μƒν•œ 예λŠ₯인을 μˆœμ„œλŒ€λ‘œ μ €μž₯

    • μ—°μ˜ˆλŒ€μƒμ„ μ—¬λŸ¬λ²ˆ λ°›μ•˜μ„ 수 있음(쀑볡 ν—ˆμš©), μˆœμ„œλŒ€λ‘œ μ €μž₯(μˆœμ„œλ₯Ό 보μž₯)
  • 탐색 μ•Œκ³ λ¦¬μ¦˜ : μ™„μ „ 탐색

  • μš©λ„ : index 접근이 ν•„μš”ν•  λ•Œ

  • νŠΉμ§• : index μ ‘κ·Ό κ°€λŠ₯


Set

  1. 같은 μ’…λ₯˜μ˜ μ•„μ΄ν…œμ„ μ €μž₯

  2. μˆœμ„œλ₯Ό 보μž₯ν•˜μ§€ μ•ŠμŒ.

  3. 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠμŒ.

  • μ›”λ“œμ»΅μ—μ„œ ν•œλ²ˆμ΄λΌλ„ 골을 넣은 μ„ μˆ˜ 이름을 μ €μž₯(μ„ μˆ˜ 이름은 λ‹€ λ‹€λ₯΄λ‹€)

    • μˆœμ„œλ„ 상관 μ—†κ³  쀑볡이 되면 μ•ˆ 됨.

    • λ§Œμ•½ List에 λ„£λŠ”λ‹€λ©΄?

      • A, B, C, D, E μ„ μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€. Aμ„ μˆ˜κ°€ 골을 λ„£κ³  ㆍㆍㆍE μ„ μˆ˜κΉŒμ§€ 골을 λ„£μ—ˆμ„ λ•Œ, Aμ„ μˆ˜κ°€ λ‹€μ‹œ 골을 λ„£λŠ”λ‹€λ©΄? List μ•ˆμ— μžˆλŠ”μ§€ 확인해야 되기 λ•Œλ¬Έμ— μ²˜μŒλΆ€ν„° λκΉŒμ§€ Listλ₯Ό 확인해야 λœλ‹€.

      • μ—¬κΈ°μ„œ ν™•μΈν•˜λŠ”λ° μ‹œκ°„μ΄ 빨리 끝날 μˆ˜λ„ μžˆμ§€λ§Œ μœ„μΉ˜μ— 따라 였래 걸릴 μˆ˜λ„ μžˆλ‹€. 즉, 데이터가 μžˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ κ±Έλ¦¬λŠ” μ‹œκ°„μ΄ μΌμ •ν•˜μ§€ μ•Šλ‹€.

  • 탐색 μ•Œκ³ λ₯΄μ¦˜ : ν•΄μ‹œ ν•¨μˆ˜ & 버킷

  • μš©λ„ : 포함 μ—¬λΆ€λ§Œ 확인할 λ•Œ

  • νŠΉμ§• : 쀑볡값 제거, μš”μ†Œ μ˜€λ¦„μ°¨μˆœ μ •λ ¬, index μ ‘κ·Ό λΆˆκ°€


HashMap

HashMap은 ν‚€-κ°’ 쌍(key-value pair)을 μ €μž₯ν•˜λŠ” 자료ꡬ쑰둜, ν‚€(key)λ₯Ό 톡해 κ°’(value)에 λΉ λ₯΄κ²Œ μ ‘κ·Όν•  수 μžˆλ‹€.

예λ₯Ό λ“€μ–΄, ν•™λ²ˆκ³Ό 학생 이름을 μ €μž₯ν•  λ•Œ keyλŠ” ν•™λ²ˆ, valueλŠ” 학생 μ΄λ¦„μœΌλ‘œ μ„€μ •ν•΄λ³΄μž.

1
2
HashMap<Integer, String> studentMap = new HashMap<>();
studentMap.put(2001206, "μ΄λ‘μœ ");  // key: 2001206, value: "μ΄λ‘μœ "

ν•˜λ‚˜μ˜ keyλŠ” 였직 ν•˜λ‚˜μ˜ valueλž‘λ§Œ 연결될 수 μžˆλ‹€.

μ€‘λ³΅λœ ν‚€λŠ” ν—ˆμš©λ˜μ§€ μ•Šμ§€λ§Œ 값은 쀑볡될 수 μžˆλ‹€.

HashSet

HashSet은 κ³ μœ ν•œ κ°’λ§Œ μ €μž₯ν•˜λŠ” μ§‘ν•©(Set) μžλ£Œκ΅¬μ‘°μ΄λ‹€.

HashSet은 λ‚΄λΆ€μ μœΌλ‘œ HashMap을 ν™œμš©ν•˜μ—¬ κ΅¬ν˜„λ˜κ³ , HashMap의 ν‚€(key)λ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μ €μž₯ν•˜κ³ , κ°’(value)μ—λŠ” 더미 값을 λ„£λŠ”λ‹€.

HashSet의 μš”μ†Œλ“€μ€ HashMap의 ν‚€ 뢀뢄에 μ €μž₯되며, 값은 λ¬΄μ‹œλœλ‹€. 이λ₯Ό 톡해 객체 κ·Έ μžμ²΄κ°€ κ³ μœ ν•˜κ²Œ μ €μž₯λ˜λŠ” 효과λ₯Ό μ–»λŠ”λ‹€.

1
2
HashSet<Integer> studentIds = new HashSet<>();
studentIds.add(2001206);  // key 뢀뢄에 데이터가 μ €μž₯

HashSet은 Set μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„μ²΄λ‘œ, μ€‘λ³΅λ˜μ§€ μ•ŠλŠ” μš”μ†Œλ₯Ό μ €μž₯ν•˜λ©°, μˆœμ„œλ₯Ό 보μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.


SortedMap

μ—°μ˜ˆ λŒ€μƒμ—μ„œ ν•œ λ²ˆμ΄λΌλ„ λŒ€μƒμ„ 받은 예λŠ₯인의 이름과 각각 λͺ‡ λ²ˆμ„ λ°›μ•˜λŠ”μ§€ μ €μž₯ν•˜μ‹œμ˜€. -> HashMap을 μ‚¬μš©ν•˜μ—¬ 이름과 횟수λ₯Ό μ €μž₯

μ—°μ˜ˆ λŒ€μƒμ—μ„œ ν•œ λ²ˆμ΄λΌλ„ λŒ€μƒμ„ 받은 예λŠ₯인의 이름과 각각 λͺ‡ λ²ˆμ„ λ°›μ•˜λŠ”μ§€ μ΄λ¦„μˆœμœΌλ‘œ μ •λ ¬ν•˜μ—¬ μ €μž₯ν•˜μ‹œμ˜€. -> SortedMap

SortedMap은 key, valueλ₯Ό key에 λŒ€ν•˜μ—¬ μ •λ ¬ν•˜μ—¬ μ €μž₯ν•˜λŠ” Map이닀.

  • μ‚½μž…, μ‚­μ œ, 검색이 HashMap이 SortedMap보닀 λΉ λ₯΄λ‹€.

    • 즉, μ •λ ¬ν•˜μ§€ μ•Šμ•„λ„ 되면 HashMap μ‚¬μš©, 정렬이 ν•„μš”ν•˜λ‹€λ©΄ SortedMap μ‚¬μš©
  • Mapμ—μ„œ KeyλŠ” 항상 unique함을 κ°€μ§„λ‹€.

  • ConcurrentSkipListMap

  • TreeMap


μΆ”κ°€

List의 크기가 n이라면 contains(item) : worst case : O(n)

Set은 크기와 상관없이 case(worst case, best case) 와도 상관없이 O(1)

HashMap: ν‚€-κ°’ μŒμ„ μ €μž₯ν•˜λ©°, ν‚€λ₯Ό 톡해 값에 λΉ λ₯΄κ²Œ μ ‘κ·Όν•  수 μžˆλ‹€. ν‚€λŠ” 쀑볡이 λΆˆκ°€λŠ₯ν•˜κ³ , 값은 쀑볡이 κ°€λŠ₯ν•˜λ‹€.

HashSet: HashMap의 ν‚€ 뢀뢄을 ν™œμš©ν•΄, κ³ μœ ν•œ 값듀을 μ €μž₯ν•˜λŠ” 집합이닀.

1

즉, μ €μž₯λ˜λŠ” λ°μ΄ν„°μ˜ μˆœμ„œλ₯Ό 보μž₯ν•΄μ•Ό λœλ‹€λ©΄ Listλ₯Ό μ‚¬μš©ν•˜λ©΄ λ˜μ§€λ§Œ 탐색이 μž¦λ‹€λ©΄ Set을 μ‚¬μš©ν•˜λŠ” 게 μ’‹λ‹€.

This post is licensed under CC BY 4.0 by the author.