πŸ–‹οΈ μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜/μ½”λ”©ν…ŒμŠ€νŠΈ

[λ©”μ„œλ“œ] ArrayDeque 클래슀 λ©”μ„œλ“œ

OR15A 2023. 11. 30. 07:48
ArrayDeque ν΄λž˜μŠ€
  • ArrayDeque λŠ” 배열을 기반으둜 ν•˜λŠ” 더블 μ—”λ“œ 큐(double-ended queue)λ₯Ό κ΅¬ν˜„ν•œ Java 클래슀
  • ArrayDeque λŠ” Queue μΈν„°νŽ˜μ΄μŠ€μ™€ Deque μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ©°, μŠ€νƒκ³Ό 큐의 κΈ°λŠ₯을 λͺ¨λ‘ μ œκ³΅ν•¨

 

μƒμ„±μž
  1. ArrayDeque():
    • 빈 ArrayDequeλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  2. ArrayDeque(int numElements):
    • μ§€μ •λœ 초기 μš©λŸ‰μ„ 가진 ArrayDequeλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  3. ArrayDeque(Collection<? extends E> c):
    • 주어진 μ»¬λ ‰μ…˜μ˜ μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” ArrayDequeλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

 

μ£Όμš” λ©”μ„œλ“œ
  1. void addFirst(E e):
    • 큐의 μ•žμͺ½μ— μš”μ†Œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
  2. void addLast(E e):
    • 큐의 λ’€μͺ½μ— μš”μ†Œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
  3. boolean addAll(Collection<? extends E> c):
    • μ»¬λ ‰μ…˜μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό 큐에 μΆ”κ°€ν•©λ‹ˆλ‹€.
  4. boolean offerFirst(E e):
    • 큐의 μ•žμͺ½μ— μš”μ†Œλ₯Ό μΆ”κ°€ν•˜κ³ , 성곡 μ—¬λΆ€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  5. boolean offerLast(E e):
    • 큐의 λ’€μͺ½μ— μš”μ†Œλ₯Ό μΆ”κ°€ν•˜κ³ , 성곡 μ—¬λΆ€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  6. E removeFirst():
    • 큐의 μ•žμͺ½μ—μ„œ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  λ°˜ν™˜ν•©λ‹ˆλ‹€.
  7. E removeLast():
    • 큐의 λ’€μͺ½μ—μ„œ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  λ°˜ν™˜ν•©λ‹ˆλ‹€.
  8. E pollFirst():
    • 큐의 μ•žμͺ½μ—μ„œ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  λ°˜ν™˜ν•˜λ©°, 큐가 λΉ„μ–΄μžˆμœΌλ©΄ null을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
  9. E pollLast():
    • 큐의 λ’€μͺ½μ—μ„œ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  λ°˜ν™˜ν•˜λ©°, 큐가 λΉ„μ–΄μžˆμœΌλ©΄ null을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
  10. E getFirst():
    • 큐의 μ•žμͺ½ μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜μ§€λ§Œ μ œκ±°ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.
  11. E getLast():
    • 큐의 λ’€μͺ½ μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜μ§€λ§Œ μ œκ±°ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.
  12. E peekFirst():
    • 큐의 μ•žμͺ½ μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜μ§€λ§Œ μ œκ±°ν•˜μ§€λŠ” μ•ŠμœΌλ©°, 큐가 λΉ„μ–΄μžˆμœΌλ©΄ null을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
  13. E peekLast():
    • 큐의 λ’€μͺ½ μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜μ§€λ§Œ μ œκ±°ν•˜μ§€λŠ” μ•ŠμœΌλ©°, 큐가 λΉ„μ–΄μžˆμœΌλ©΄ null을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
  14. boolean removeFirstOccurrence(Object o):
    • 주어진 객체와 μΌμΉ˜ν•˜λŠ” 첫 번째 μš”μ†Œλ₯Ό νμ—μ„œ μ œκ±°ν•©λ‹ˆλ‹€.
  15. boolean removeLastOccurrence(Object o):
    • 주어진 객체와 μΌμΉ˜ν•˜λŠ” λ§ˆμ§€λ§‰ μš”μ†Œλ₯Ό νμ—μ„œ μ œκ±°ν•©λ‹ˆλ‹€.

 


 

Queue μΈν„°νŽ˜μ΄μŠ€ λ©”μ„œλ“œ

  1. boolean add(E e):
    • 큐의 λ’€μͺ½μ— μš”μ†Œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
  2. boolean offer(E e):
    • 큐의 λ’€μͺ½μ— μš”μ†Œλ₯Ό μΆ”κ°€ν•˜κ³ , 성곡 μ—¬λΆ€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  3. E remove():
    • 큐의 μ•žμͺ½μ—μ„œ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  λ°˜ν™˜ν•©λ‹ˆλ‹€.
  4. E poll():
    • 큐의 μ•žμͺ½μ—μ„œ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  λ°˜ν™˜ν•˜λ©°, 큐가 λΉ„μ–΄μžˆμœΌλ©΄ null을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
  5. E element():
    • 큐의 μ•žμͺ½ μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜μ§€λ§Œ μ œκ±°ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.
  6. E peek():
    • 큐의 μ•žμͺ½ μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜μ§€λ§Œ μ œκ±°ν•˜μ§€λŠ” μ•ŠμœΌλ©°, 큐가 λΉ„μ–΄μžˆμœΌλ©΄ null을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

 

 

Stack λ©”μ„œλ“œ

  1. void push(E e):
    • μŠ€νƒμ— μš”μ†Œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. addFirst와 λ™μΌν•©λ‹ˆλ‹€.
  2. E pop():
    • μŠ€νƒμ—μ„œ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  λ°˜ν™˜ν•©λ‹ˆλ‹€. removeFirst와 λ™μΌν•©λ‹ˆλ‹€.

 

 

Collection μΈν„°νŽ˜μ΄μŠ€ λ©”μ„œλ“œ

  1. int size():
    • 큐에 μžˆλŠ” μš”μ†Œμ˜ 수λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  2. boolean isEmpty():
    • 큐가 λΉ„μ–΄ μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  3. Iterator<E> iterator():
    • 큐의 μš”μ†Œμ— λŒ€ν•œ 반볡자λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  4. Iterator<E> descendingIterator():
    • 큐의 μš”μ†Œμ— λŒ€ν•œ μ—­λ°©ν–₯ 반볡자λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  5. Spliterator<E> spliterator():
    • 큐의 μš”μ†Œμ— λŒ€ν•œ μŠ€ν”Œλ¦¬ν„°λ ˆμ΄ν„°λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  6. void forEach(Consumer<? super E> action):
    • 큐의 각 μš”μ†Œμ— λŒ€ν•΄ 주어진 μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  7. boolean removeIf(Predicate<? super E> filter):
    • 주어진 쑰건에 λ§žλŠ” μš”μ†Œλ₯Ό νμ—μ„œ μ œκ±°ν•©λ‹ˆλ‹€.
  8. boolean removeAll(Collection<?> c):
    • μ§€μ •λœ μ»¬λ ‰μ…˜μ— μžˆλŠ” μš”μ†Œλ₯Ό λͺ¨λ‘ νμ—μ„œ μ œκ±°ν•©λ‹ˆλ‹€.
  9. boolean retainAll(Collection<?> c):
    • μ§€μ •λœ μ»¬λ ‰μ…˜μ— μ—†λŠ” λͺ¨λ“  μš”μ†Œλ₯Ό νμ—μ„œ μ œκ±°ν•©λ‹ˆλ‹€.
  10. boolean contains(Object o):
    • 큐가 μ§€μ •λœ 객체λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  11. boolean remove(Object o):
    • 주어진 객체와 μΌμΉ˜ν•˜λŠ” μš”μ†Œλ₯Ό νμ—μ„œ μ œκ±°ν•©λ‹ˆλ‹€.
  12. void clear():
    • 큐의 λͺ¨λ“  μš”μ†Œλ₯Ό μ œκ±°ν•©λ‹ˆλ‹€.
  13. Object[] toArray():
    • 큐의 λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” 배열을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

 

 

λ‚˜λ¨Έμ§€ μ£Όμš” 곡개 λ©”μ„œλ“œ

  1. <T> T[] toArray(T[] a):
    • μ„€λͺ…: 큐의 λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” 배열을 λ°˜ν™˜ν•©λ‹ˆλ‹€. λ©”μ„œλ“œ 인자둜 주어진 λ°°μ—΄ νƒ€μž…μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  2. private <T> T[] toArray(Class<T[]> klazz):
    • μ„€λͺ…: λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” λ©”μ„œλ“œλ‘œ, νŠΉμ • 클래슀 νƒ€μž…μ˜ 배열을 μƒμ„±ν•˜μ—¬ 큐의 μš”μ†Œλ₯Ό 이 배열에 λ‹΄μ•„ λ°˜ν™˜ν•©λ‹ˆλ‹€.
  3. private void writeObject(java.io.ObjectOutputStream s):
    • μ„€λͺ…: 직렬화 κ³Όμ •μ—μ„œ ArrayDeque의 μƒνƒœλ₯Ό μ“°κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
  4. private void readObject(java.io.ObjectInputStream s):
    • μ„€λͺ…: 역직렬화 κ³Όμ •μ—μ„œ ArrayDeque의 μƒνƒœλ₯Ό 읽어듀이기 μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
  5. void checkInvariants():
    • μ„€λͺ…: ArrayDeque의 λ‚΄λΆ€ μƒνƒœκ°€ μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•˜κΈ° μœ„ν•œ λ©”μ„œλ“œμž…λ‹ˆλ‹€.

 

내뢀적 μ‚¬μš© λ©”μ„œλ“œ 및 κ΅¬ν˜„

ArrayDequeμ—λŠ” transient Object[] elements, transient int head, transient int tail λ“±μ˜ ν•„λ“œμ™€ grow, newCapacity, copyElements, circularClear λ“±μ˜ λ‚΄λΆ€ λ©”μ„œλ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 이듀은 λŒ€λΆ€λΆ„ ArrayDeque의 λ‚΄λΆ€ κ΅¬ν˜„κ³Ό 관련이 있으며, ArrayDeque의 크기 μ‘°μ •, μš”μ†Œ 볡사, λ°°μ—΄ μˆœν™˜ λ“±μ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

 

transient Object[] elements; transient int head; transient int tail; private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; private void grow(int needed) { private int newCapacity(int needed, int jump) { public ArrayDeque() public ArrayDeque(int numElements) public ArrayDeque(Collection<? extends E> c) static final int inc(int i, int modulus) static final int dec(int i, int modulus) static final int inc(int i, int distance, int modulus) static final int sub(int i, int j, int modulus) public void addFirst(E e) public void addLast(E e) public boolean addAll(Collection<? extends E> c) private void copyElements(Collection<? extends E> c) public boolean offerFirst(E e) public boolean offerLast(E e) public E removeFirst() public E removeLast() public E pollFirst() public E pollLast() public E getFirst() public E getLast() public E peekFirst() public E peekLast() public boolean removeFirstOccurrence(Object o) public boolean removeLastOccurrence(Object o) [Queue methods ] public boolean add(E e) public boolean offer(E e) public E remove() public E poll() public E element() public E peek() [Stack methods] public void push(E e) public E pop() boolean delete(int i) [Collection Methods *** ] public int size() public boolean isEmpty() public Iterator<E> iterator() public Iterator<E> descendingIterator() private class DeqIterator public Spliterator<E> spliterator() final class DeqSpliterator public void forEach(Consumer<? super E> action) public boolean removeIf(Predicate<? super E> filter) public boolean removeAll(Collection<?> c) public boolean retainAll(Collection<?> c) private boolean bulkRemove(Predicate<? super E> filter) private static long[] nBits(int n) private static void setBit(long[] bits, int i) private static boolean isClear(long[] bits, int i) private boolean bulkRemoveModified public boolean contains(Object o) public boolean remove(Object o) public void clear() private static void circularClear(Object[] es, int i, int end) public Object[] toArray() private <T> T[] toArray(Class<T[]> klazz) private void writeObject(java.io.ObjectOutputStream s) private void readObject(java.io.ObjectInputStream s) void checkInvariants()