π™‡π™žπ™¨π™© π˜Ύπ™€π™‘π™‘π™šπ™˜π™©π™žπ™€π™£ π˜Ύπ™‘π™–π™¨π™¨

uuuouuoΒ·2022λ…„ 7μ›” 18일
0
post-thumbnail

πŸ“– List μ»¬λ ‰μ…˜ 클래슀


νŠΉμ§•

  1. μš”μ†Œμ˜ μ €μž₯ μˆœμ„œ μœ μ§€
  2. 같은 μš”μ†Œμ˜ 쀑볡 μ €μž₯ ν—ˆμš©

λŒ€ν‘œμ  List μ»¬λ ‰μ…˜ 클래슀

  1. ArrayList< E >
  2. LinkedList< E >
  3. Vector< E >
  4. Stack< E >


πŸ’¬ ArrayList< E > 클래슀


  • ArrayListΒ ν΄λž˜μŠ€λŠ” κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” μ»¬λ ‰μ…˜ 클래슀 쀑 ν•˜λ‚˜
  • JDK 1.2λΆ€ν„° 제곡된 ArrayListΒ ν΄λž˜μŠ€λŠ” λ‚΄λΆ€μ μœΌλ‘œ 배열을 μ΄μš©ν•˜μ—¬ μš”μ†Œλ₯Ό μ €μž₯
  • λ°°μ—΄κ³Ό 달리 초기 크기λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ 됨
  • 데이터 μΆ”κ°€,μ‚­μ œλ₯Ό μœ„ν•΄ μž„μ‹œ 배열을 생성해 데이터λ₯Ό 볡사
  • 단방ν–₯ 포인터 ꡬ쑰이며, 각 데이터에 λŒ€ν•œ 인덱슀λ₯Ό μ΄μš©ν•΄Β λ°°μ—΄ μš”μ†Œμ— λΉ λ₯΄κ²Œ μ ‘κ·Ό
    • λŒ€λŸ‰μ˜ 자료λ₯Ό μ‚½μž…/μ‚­μ œμ‹œ 볡사가 일어 λ‚˜κ²Œ λ˜μ–΄ μ„±λŠ₯ μ €ν•˜λ₯Ό 일이킴
  • μ‹œκ°„λ³΅μž‘λ„
    • add : O(1)
    • remove : O(n)
    • get : O(1)
    • Contains : O(n)
    • iterator.remove : O(n)

β—Ύ ArrayList< E >의 μ£Όμš” λ©”μ†Œλ“œ

λ©”μ†Œλ“œμ„€λͺ…
boolean add(E e)ν•΄λ‹Ή μ»¬λ ‰μ…˜(collection)에 μ „λ‹¬λœ μš”μ†Œλ₯Ό μΆ”κ°€
boolean remove(Object o)ν•΄λ‹Ή μ»¬λ ‰μ…˜μ—μ„œ μ „λ‹¬λœ 객체λ₯Ό 제거
E remove(int index)ν•΄λ‹Ή μ»¬λ ‰μ…˜μ—μ„œ ν•΄λ‹Ή 인덱슀 객체λ₯Ό 제거
boolean removeAll(Colleciont< ? > c)μ „λ‹¬λœ μ»¬λ ‰μ…˜ λ‚΄ κ°’κ³Ό ν•΄λ‹Ή μ»¬λ ‰μ…˜ μ•ˆ 일치 κ°’ λͺ¨λ‘ 제거
boolean removeIf(Predicat< ? super E > filter)μ£Όμ–΄μ§„ 쑰건을 λ§Œμ‘±ν•˜λŠ” ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό 제거
void clear()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό 제거
boolean contains(Object o)ν•΄λ‹Ή μ»¬λ ‰μ…˜μ΄ μ „λ‹¬λœ 객체λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ”μ§€λ₯Ό 확인
boolean equals(Object o)ν•΄λ‹Ή μ»¬λ ‰μ…˜κ³Ό μ „λ‹¬λœ 객체가 같은지λ₯Ό 확인
boolean isEmpty()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ΄ λΉ„μ–΄μžˆλŠ”μ§€λ₯Ό 확인
int size()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ μš”μ†Œμ˜ 총 개수λ₯Ό λ°˜ν™˜
E get(int index)ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ μ „λ‹¬λœ 인덱슀의 μš”μ†Œ λ°˜ν™˜
int indexOf(Object o)ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ μš”μ†Œμ—μ„œ μ „λ‹¬λœ 객체와 같은 첫번째 인덱슀 λ°˜ν™˜
int lastIndexOf(Object o)ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ μš”μ†Œμ—μ„œ μ „λ‹¬λœ 객체와 같은 λ§ˆμ§€λ§‰ 인덱슀 λ°˜ν™˜
E set(int index, E element)ν•΄λ‹Ή 인덱슀의 μš”μ†Œ λ³€κ²½
void sort(Comparator< ? super E > cμ§€μ •λœ Comparator에 μ˜ν•΄ ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ μš”μ†Œ μ •λ ¬


πŸ’¬ Vector< E > 클래슀


  • JDK 1.0λΆ€ν„° μ‚¬μš©ν•΄ 온 ArrayList ν΄λž˜μŠ€μ™€ 같은 λ™μž‘μ„ μˆ˜ν–‰ν•˜λŠ” 클래슀

  • ν˜„μž¬μ˜ Vector ν΄λž˜μŠ€λŠ” ArrayList ν΄λž˜μŠ€μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ List μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†λ°›μŒ

  • λ”°λΌμ„œ Vector ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ†Œλ“œλŠ” ArrayList ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ†Œλ“œμ™€ 거의 κ°™μŒ

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



πŸ’¬ LinkedList< E > 클래슀


  • ArrayList ν΄λž˜μŠ€κ°€ 배열을 μ΄μš©ν•˜μ—¬ μš”μ†Œλ₯Ό μ €μž₯ν•¨μœΌλ‘œμ¨ λ°œμƒν•˜λŠ” 단점을 κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ κ³ μ•ˆ
  • JDK 1.2λΆ€ν„° 제곡된 LinkedList ν΄λž˜μŠ€λŠ” λ‚΄λΆ€μ μœΌλ‘œ μ—°κ²° 리슀트(linked list)λ₯Ό μ΄μš©ν•˜μ—¬ μš”μ†Œλ₯Ό μ €μž₯
  • μ—°κ²° λ¦¬μŠ€νŠΈλŠ” μ €μž₯된 μš”μ†Œκ°€ λΉ„μˆœμ°¨μ μœΌλ‘œ λΆ„ν¬λ˜λ©°, μ΄λŸ¬ν•œ μš”μ†Œλ“€ 사이λ₯Ό 링크(link)둜 μ—°κ²°ν•˜μ—¬ ꡬ성
  • 데이터 μΆ”κ°€/μ‚­μ œ μ‹œ 빠름
  • 데이터 검색 μ‹œ μ²˜μŒλΆ€ν„° λ…Έλ“œλ₯Ό μˆœνšŒν•΄μ•Όν•΄μ„œ 느림
  • μ‹œκ°„λ³΅μž‘λ„
    • add : O(1)
    • remove : O(1)
    • get : O(n)
    • Contains : O(n)
    • iterator.remove : O(1)

β—Ύ 단일 μ—°κ²° λ¦¬μŠ€νŠΈμ™€ 이쀑 μ—°κ²° 리슀트

  • 단일 μ—°κ²° 리슀트
    • μš”μ†Œμ˜ μ €μž₯κ³Ό μ‚­μ œ μž‘μ—…μ΄ λ‹€μŒ μš”μ†Œλ₯Ό κ°€λ¦¬ν‚€λŠ” 참쑰만 λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ, μ•„μ£Ό λΉ λ₯΄κ²Œ 처리
    • ν˜„μž¬ μš”μ†Œμ—μ„œ 이전 μš”μ†Œλ‘œ μ ‘κ·Όν•˜κΈ°κ°€ 맀우 어렀움

  • 이쀑 μ—°κ²° 리슀트
    • λ”°λΌμ„œ 이전 μš”μ†Œλ₯Ό κ°€λ¦¬ν‚€λŠ” 참쑰도 κ°€μ§€λŠ” 이쀑 μ—°κ²° 리슀트(doubly linked list)κ°€ μ’€ 더 많이 μ‚¬μš©
    • LinkedList ν΄λž˜μŠ€λ„ μœ„μ™€ 같은 이쀑 μ—°κ²° 리슀트λ₯Ό λ‚΄λΆ€μ μœΌλ‘œ κ΅¬ν˜„

β—Ύ LinkedList< E >의 μ£Όμš” λ©”μ„œλ“œ

  • List 클래슀 μ—­μ‹œ List μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ―€λ‘œ, ArrayList ν΄λž˜μŠ€μ™€ μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ†Œλ“œκ°€ 거의 κ°™μŒ
λ©”μ†Œλ“œμ„€λͺ…
boolean add(E e)ν•΄λ‹Ή μ»¬λ ‰μ…˜(collection)에 μ „λ‹¬λœ μš”μ†Œ μΆ”κ°€
void add(int index, E element)ν•΄λ‹Ή μ»¬λ ‰μ…˜(collection)에 μ§€μ •λœ μΈλ±μŠ€μ— μ „λ‹¬λœ μš”μ†Œ μΆ”κ°€
void addFrist(E e)ν•΄λ‹Ή μ»¬λ ‰μ…˜(collection)에 μ „λ‹¬λœ μš”μ†Œ λ§¨μ•žμ— μΆ”κ°€
void addLast(E e)ν•΄λ‹Ή μ»¬λ ‰μ…˜(collection)에 μ „λ‹¬λœ μš”μ†Œ λ§ˆμ§€λ§‰μ— μΆ”κ°€
boolean remove(Object o)ν•΄λ‹Ή μ»¬λ ‰μ…˜μ—μ„œ μ „λ‹¬λœ 객체λ₯Ό 제거
E remove(int index)ν•΄λ‹Ή μ»¬λ ‰μ…˜μ—μ„œ ν•΄λ‹Ή 인덱슀 객체λ₯Ό 제거
E removeFirst()ν•΄λ‹Ή μ»¬λ ‰μ…˜(collection)에 첫번째 μš”μ†Œ 제거 ν›„ λ°˜ν™˜
E removeLast()ν•΄λ‹Ή μ»¬λ ‰μ…˜(collection)에 λ§ˆμ§€λ§‰ μš”μ†Œ 제거 ν›„ λ°˜ν™˜
void clear()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό 제거
boolean contains(Object o)ν•΄λ‹Ή μ»¬λ ‰μ…˜μ΄ μ „λ‹¬λœ 객체λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ”μ§€λ₯Ό 확인
boolean equals(Object o)ν•΄λ‹Ή μ»¬λ ‰μ…˜κ³Ό μ „λ‹¬λœ 객체가 같은지λ₯Ό 확인
boolean isEmpty()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ΄ λΉ„μ–΄μžˆλŠ”μ§€λ₯Ό 확인
int size()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ μš”μ†Œμ˜ 총 개수λ₯Ό λ°˜ν™˜
E get(int index)ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ μ „λ‹¬λœ 인덱슀의 μš”μ†Œ λ°˜ν™˜
E getFirst()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ μ „λ‹¬λœ 첫번째 μš”μ†Œ λ°˜ν™˜
int indexOf(Object o)ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ μš”μ†Œμ—μ„œ μ „λ‹¬λœ 객체와 같은 첫번째 인덱슀 λ°˜ν™˜
int lastIndexOf(Object o)ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ μš”μ†Œμ—μ„œ μ „λ‹¬λœ 객체와 같은 λ§ˆμ§€λ§‰ 인덱슀 λ°˜ν™˜
boolean offer(E e)μ „λ‹¬λœ 객체λ₯Ό ν•΄λ‹Ή μ»¬λ ‰μ…˜ λ§ˆμ§€λ§‰μ— μΆ”κ°€
boolean offerFirst(E e)μ „λ‹¬λœ 객체λ₯Ό ν•΄λ‹Ή μ»¬λ ‰μ…˜ λ§¨μ•žμ— μΆ”κ°€
E peek()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ 첫번째 μš”μ†Œλ₯Ό μ‘°νšŒν•˜μ§€λ§Œ μ œκ±°λŠ” ν•˜μ§€μ•ŠμŒ
E peekFirst()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ 첫번째 μš”μ†Œλ₯Ό μ‘°νšŒν•˜μ§€λ§Œ μ œκ±°λŠ” ν•˜μ§€μ•ŠμŒ (μ—†μœΌλ©΄ null λ°˜ν™˜)
E peekLast()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ λ§ˆμ§€λ§‰μ„ μ‘°νšŒν•˜μ§€λ§Œ μ œκ±°λŠ” ν•˜μ§€μ•ŠμŒ (μ—†μœΌλ©΄ null λ°˜ν™˜)
E poll()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ 첫번째 μš”μ†Œλ₯Ό μ‘°νšŒν•˜κ³  제거
E pollFirst()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ 첫번째 μš”μ†Œλ₯Ό μ‘°νšŒν•˜κ³  제거 (μ—†μœΌλ©΄ null λ°˜ν™˜)
E pollLast()ν•΄λ‹Ή μ»¬λ ‰μ…˜μ˜ λ§ˆμ§€λ§‰ μš”μ†Œλ₯Ό μ‘°νšŒν•˜κ³  제거 (μ—†μœΌλ©΄ null λ°˜ν™˜)
E set(int index, E element)ν•΄λ‹Ή 인덱슀의 μš”μ†Œ λ³€κ²½

β—Ύ μ°Έκ³ ) add() vs offer()

  • μ‹€νŒ¨ν–ˆμ„ 경우 Exception μ²˜λ¦¬ν•˜λŠ”κ°€ special value 처리(λΉ„μ—ˆλ‹€λ©΄ null λ°˜ν™˜)ν•˜λŠ”κ°€λ‘œ λ‚˜λ‰¨

0개의 λŒ“κΈ€