Advertisement
Guest User

Untitled

a guest
Oct 31st, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.97 KB | None | 0 0
  1. public class ArrayDeque<T> implements Deque<T> {
  2. private int head, tail, size;
  3. private Object[] deque;
  4. public static final int DEFAULT_CAPACITY = 16;
  5.  
  6. public ArrayDeque() {
  7. this(DEFAULT_CAPACITY);
  8. }
  9.  
  10. public ArrayDeque(int initialCapacity) {
  11. deque = new Object[initialCapacity];
  12. tail = -1;
  13. }
  14.  
  15. @Override
  16. public boolean addFirst(T obj) {
  17. if (atCapacity()) {
  18. resize(2 * deque.length);
  19. }
  20. if (isEmpty()) {
  21. head = tail = 0;
  22. } else {
  23. head = (deque.length + head - 1) % deque.length;
  24. }
  25. deque[head] = obj;
  26. size++;
  27. return true;
  28. }
  29.  
  30. @Override
  31. public boolean addLast(T obj) {
  32. if (atCapacity()) {
  33. resize(2 * deque.length);
  34. }
  35. if (isEmpty()) {
  36. head = tail = 0;
  37. } else {
  38. tail = (tail + 1) % deque.length;
  39. }
  40. deque[tail] = obj;
  41. size++;
  42. return true;
  43. }
  44.  
  45. @Override
  46. public boolean offerFirst(T obj) {
  47. try {
  48. addFirst(obj);
  49. } catch (IllegalStateException e) {
  50. return false;
  51. }
  52. return true;
  53. }
  54.  
  55. @Override
  56. public boolean offerLast(T obj) {
  57. try {
  58. addLast(obj);
  59. } catch (IllegalStateException e) {
  60. return false;
  61. }
  62. return true;
  63.  
  64. }
  65.  
  66. @Override
  67. public T getFirst() {
  68. T t = (T) deque[head];
  69. if (t == null)
  70. throw new NoSuchElementException();
  71. return t;
  72. }
  73.  
  74. @Override
  75. public T getLast() {
  76. T t = (T) deque[tail];
  77. if (t == null)
  78. throw new NoSuchElementException();
  79. return t;
  80. }
  81.  
  82. @Override
  83. public T peekFirst() {
  84. return (T) deque[head];
  85. }
  86.  
  87. @Override
  88. public T peekLast() {
  89. return (T) deque[tail];
  90. }
  91.  
  92. @Override
  93. public T removeFirst() {
  94. T x = pollFirst();
  95. if (x == null)
  96. throw new NoSuchElementException();
  97. return x;
  98. }
  99.  
  100. @Override
  101. public T removeLast() {
  102. T x = pollLast();
  103. if (x == null)
  104. throw new NoSuchElementException();
  105. return x;
  106. }
  107.  
  108. @Override
  109. public T pollFirst() {
  110. T result = (T) deque[head]; // Element is null if deque empty
  111. if (result == null)
  112. return null;
  113. deque[head] = null; // Must null out slot
  114. head = (head + 1) & (deque.length - 1);
  115. return result;
  116. }
  117.  
  118. @Override
  119. public T pollLast() {
  120. int t = (tail - 1) & (deque.length - 1);
  121. T result = (T) deque[t];
  122. if (result == null)
  123. return null;
  124. deque[t] = null;
  125. tail = t;
  126. return result;
  127. }
  128.  
  129. @Override
  130. public void clear() {
  131. head = tail = size = 0;
  132. }
  133.  
  134. @Override
  135. public boolean contains(T obj) {
  136. for (int i = 0; i < size; i++){
  137. int index = (head + i) % deque.length;
  138.  
  139. if (deque[index].equals(obj))
  140. return true;
  141. }
  142. return false;
  143. }
  144.  
  145. @Override
  146. public int size() {
  147. return size;
  148. }
  149.  
  150. @Override
  151. public boolean isEmpty() {
  152. return head==tail;
  153. }
  154.  
  155. @Override
  156. public Object[] toArray() {
  157. Object [] array = new Object [size];
  158. for (int i = 0; i < size; i++){
  159. int index = (head + i) % deque.length;
  160. array[i] = deque[index];
  161. }
  162. return array;
  163. }
  164.  
  165. private boolean atCapacity() {
  166. return size == deque.length;
  167. }
  168.  
  169. private void resize(int newCapacity) {
  170. Object [] temp = new Object[newCapacity];
  171. for (int i = 0; i < size; i++){
  172. int index = (head+i) % deque.length;
  173. temp[i] = deque[index];
  174. }
  175. head = 0;
  176. tail = size-1;
  177. }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement