Guest User

Untitled

a guest
Apr 23rd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.21 KB | None | 0 0
  1. import org.jetbrains.annotations.NotNull;
  2. import java.util.*;
  3. import java.util.function.Consumer;
  4.  
  5. public class MyCollection<T> implements List<T> {
  6.  
  7. transient private Node<T> first; // null <-[first] -> <- [last] -> null
  8. transient private Node<T> last;
  9. transient private int size = 0;
  10.  
  11. public MyCollection() {
  12. first = new Node<>(null, null, last);
  13. last = new Node<>(null, first, null);
  14. }
  15. @Override
  16. public int size() {
  17. return size;
  18. }
  19.  
  20. @Override
  21. public boolean isEmpty() {
  22. return size == 0;
  23. }
  24.  
  25. @Override
  26. public boolean contains(Object o) {
  27. if (o == null) {
  28. for (Node<T> target = first; target != null; target = target.next){
  29. if(target.item == null)
  30. return true;
  31. }
  32. }
  33. else {
  34. for (Node<T> target = first; target != null; target = target.next) {
  35. if (o.equals(target.item)) {
  36. return true;
  37. }
  38. }
  39. }
  40. return false;
  41. }
  42.  
  43. @NotNull
  44. @Override
  45. public Iterator<T> iterator() {
  46. if (isEmpty()) {
  47. return Collections.<T>emptyList().iterator();
  48. }
  49. return new Iterator<>() {
  50.  
  51. private Node<T> currentNode = null;
  52.  
  53. @Override
  54. public boolean hasNext() {
  55. return currentNode != last;
  56. }
  57.  
  58. @Override
  59. public T next() {
  60. if (currentNode == null) {
  61. currentNode = first;
  62. return currentNode.item;
  63. }
  64. if (currentNode.next == null) {
  65. throw new NoSuchElementException();
  66. }
  67. currentNode = currentNode.next;
  68. return currentNode.item;
  69. }
  70. };
  71. }
  72.  
  73. @Override
  74. public void forEach(Consumer<? super T> action) {
  75.  
  76. }
  77.  
  78. @NotNull
  79. @Override
  80. public Object[] toArray() {
  81. int a = 0;
  82. Object[] newArray = new Object[size];
  83. for (Node<T> target = first; target != null; target = target.next) {
  84. newArray[a++] = target.item;
  85. }
  86. return newArray;
  87. }
  88.  
  89. @NotNull
  90. @Override
  91. public <R> R[] toArray(@NotNull R[] a) {
  92. int b = 0;
  93. Object[] newArray = a;
  94. for (Node<T> target = first; target != null; target = target.next) {
  95. newArray[b++] = target.item;
  96. }
  97. return a;
  98. }
  99.  
  100. @Override
  101. public boolean add(T t) {
  102. if (t == null) {
  103. throw new IllegalArgumentException("Null");
  104. }
  105.  
  106. Node<T> prev = last;
  107. prev.item = t;
  108. last = new Node<>(null, prev, null);
  109. prev.next = last;
  110. size++;
  111. return true;
  112. }
  113.  
  114. @Override
  115. public boolean remove(Object o) {
  116. return false;
  117. }
  118.  
  119. @Override
  120. public boolean containsAll(@NotNull Collection<?> c) {
  121. return false;
  122. }
  123.  
  124. @Override
  125. public boolean addAll(@NotNull Collection<? extends T> c) {
  126. return false;
  127. }
  128.  
  129. @Override
  130. public boolean addAll(int index, @NotNull Collection<? extends T> c) {
  131. return false;
  132. }
  133.  
  134. @Override
  135. public boolean removeAll(@NotNull Collection<?> c) {
  136. return false;
  137. }
  138.  
  139. @Override
  140. public boolean retainAll(@NotNull Collection<?> c) {
  141. return false;
  142. }
  143.  
  144. @Override
  145. public void clear() {
  146.  
  147. }
  148.  
  149. @Override
  150. public T get(int index) {
  151. if (index < 0 || index > size) {
  152. return null;
  153. }
  154. Node<T> target = first;
  155. for (int i = 0; i < index; i++) {
  156. target = getNext(target);
  157. }
  158. return target.item;
  159. }
  160.  
  161. private Node<T> getNext(Node<T> current) {
  162. return current.next;
  163. }
  164.  
  165. @Override
  166. public T set(int index, T element) {
  167. return null;
  168. }
  169.  
  170. @Override
  171. public void add(int index, T element) {
  172. if (get(index) == null) {
  173. throw new NoSuchElementException();
  174. }
  175. else if (index < 0 || index >= size) {
  176. throw new NullPointerException();
  177. }
  178.  
  179. }
  180.  
  181. @Override
  182. public T remove(int index) {
  183. return null;
  184. }
  185.  
  186. private String outOfBoundsMsg(int index) {
  187. return "Index: "+index+", Size: "+size;
  188. }
  189.  
  190. private void checkIndex(int index) {
  191. if (!correctIndex(index))
  192. throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
  193. }
  194. private boolean correctIndex(int index) {
  195. return index >= 0 && index < size;
  196. }
  197.  
  198. @Override
  199. public int indexOf(Object o) {
  200. return 0;
  201. }
  202.  
  203. @Override
  204. public int lastIndexOf(Object o) {
  205. return 0;
  206. }
  207.  
  208. @NotNull
  209. @Override
  210. public ListIterator<T> listIterator() {
  211. return null;
  212. }
  213.  
  214. @NotNull
  215. @Override
  216. public ListIterator<T> listIterator(int index) {
  217. return null;
  218. }
  219.  
  220. @NotNull
  221. @Override
  222. public List<T> subList(int fromIndex, int toIndex) {
  223. return null;
  224. }
  225.  
  226. private static class Node<E> {
  227. E item;
  228. Node<E> next;
  229. Node<E> prev;
  230.  
  231. Node(E element, Node<E> prev, Node<E> next) {
  232. this.item = element;
  233. this.next = next;
  234. this.prev = prev;
  235. }
  236.  
  237. }
  238.  
  239. }
Add Comment
Please, Sign In to add comment