Своя коллекция LinkedList

266
25 апреля 2018, 07:56

Почему при добавлении в коллекцию элементов, выдает null ??

import org.jetbrains.annotations.NotNull;
import java.util.*;
import java.util.function.Consumer;
public class MyCollection<T> implements List<T> {
    transient private Node<T> first;  //  null <-[first] -> <- [last] -> null
    transient private Node<T> last;
    transient private int size = 0;
    public MyCollection() {
        first = new Node<>(null, null, last);
        last = new Node<>(null, first, null);
    }
    @Override
    public int size() {
        return size;
    }
    @Override
    public boolean isEmpty() {
        return size == 0;
    }
    @Override
    public boolean contains(Object o) {
        if (o == null) {
            for (Node<T> target = first; target != null; target = target.next){
                if(target.item == null)
                    return true;
            }
        }
        else {
            for (Node<T> target = first; target != null; target = target.next) {
                if (o.equals(target.item)) {
                    return true;
                }
            }
        }
        return false;
    }
    @NotNull
    @Override
    public Iterator<T> iterator() {
        if (isEmpty()) {
            return Collections.<T>emptyList().iterator();
        }
        return new Iterator<>() {
            private Node<T> currentNode = null;
            @Override
            public boolean hasNext() {
                return currentNode != last;
            }
            @Override
            public T next() {
                if (currentNode == null) {
                    currentNode = first;
                    return currentNode.item;
                }
                if (currentNode.next == null) {
                    throw new NoSuchElementException();
                }
                currentNode = currentNode.next;
                return currentNode.item;
            }
        };
    }
    @Override
    public void forEach(Consumer<? super T> action) {
    }
    @NotNull
    @Override
    public Object[] toArray() {
        int a = 0;
        Object[] newArray = new Object[size];
        for (Node<T> target = first; target != null; target = target.next) {
            newArray[a++] = target.item;
        }
        return newArray;
    }
    @NotNull
    @Override
    public <R> R[] toArray(@NotNull R[] a) {
        int b = 0;
        Object[] newArray = a;
        for (Node<T> target = first; target != null; target = target.next) {
            newArray[b++] = target.item;
        }
        return a;
    }
    @Override
    public boolean add(T t) {
        if (t == null) {
            throw new IllegalArgumentException("Null");
        }
        Node<T> prev = last;
        prev.item = t;
        last = new Node<>(null, prev, null);
        prev.next = last;
        size++;
        return true;
    }
    @Override
    public boolean remove(Object o) {
        return false;
    }
    @Override
    public boolean containsAll(@NotNull Collection<?> c) {
        return false;
    }
    @Override
    public boolean addAll(@NotNull Collection<? extends T> c) {
        return false;
    }
    @Override
    public boolean addAll(int index, @NotNull Collection<? extends T> c) {
        return false;
    }
    @Override
    public boolean removeAll(@NotNull Collection<?> c) {
        return false;
    }
    @Override
    public boolean retainAll(@NotNull Collection<?> c) {
        return false;
    }
    @Override
    public void clear() {
    }
    @Override
    public T get(int index) {
        if (index < 0 || index > size) {
            return null;
        }
        Node<T> target = first;
        for (int i = 0; i < index; i++) {
            target = getNext(target);
        }
        return target.item;
    }
    private Node<T> getNext(Node<T> current) {
        return current.next;
    }
    @Override
    public T set(int index, T element) {
        return null;
    }
    @Override
    public void add(int index, T element) {
        if (get(index) == null) {
            throw new NoSuchElementException();
        }
        else if (index < 0 || index >= size) {
            throw new NullPointerException();
        }
    }
    @Override
    public T remove(int index) {
        return null;
    }
    private String outOfBoundsMsg(int index) {
        return "Index: "+index+", Size: "+size;
    }
    private void checkIndex(int index) {
        if (!correctIndex(index))
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }
    private boolean correctIndex(int index) {
        return index >= 0 && index < size;
    }
    @Override
    public int indexOf(Object o) {
        return 0;
    }
    @Override
    public int lastIndexOf(Object o) {
        return 0;
    }
    @NotNull
    @Override
    public ListIterator<T> listIterator() {
        return null;
    }
    @NotNull
    @Override
    public ListIterator<T> listIterator(int index) {
        return null;
    }
    @NotNull
    @Override
    public List<T> subList(int fromIndex, int toIndex) {
        return null;
    }
    private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;
        Node(E element, Node<E> prev, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }
}
Answer 1

могу ошибаться, но возможно в строке

Node<T> prev = last;

нужно поправить на

Node<T> prev = new Node<>(last);
READ ALSO
Использование final аргумента в локальном классе

Использование final аргумента в локальном классе

Без всяких лишних слов напишу код:

230
Парсинг(Скрапинг) web-стриниц

Парсинг(Скрапинг) web-стриниц

Мне нужно пропарсить веб страницу в java, на которой необходимо сперва залогиниться ввести пароль и тдЧитал в интернете , это делают через htmlunit

202
Замена разделителя в строке

Замена разделителя в строке

Есть строка с реквизитами вида AAA,BBBB,AAAAA И есть строка с реквизитами вида AAA, BBBB, AAAAA Так же бывают AAA,BBBB, AAAAA или AAA ,BBBB, AAAAA

244