В этой серии статей я продемонстрирую один из способов реализации интерфейса List. Для реализации мы будем использовать двунаправленную очередь.
1. Начнем с теории.
Рассмотрим схему двунаправленной очереди:
next
– это указатель на следующий элемент очереди.previous
– это указатель на предыдущий элемент очереди.item
– текущий элемент очереди.
Теперь разберемся, что же тут происходит.
Первый элемент очереди хранит какой то item и ссылки на следующий и предыдущий элемент. Так как в примере 3 элемента в очереди, то в первом элементе next хранит адрес следующего элемента. Но если бы у нас в очереди был только один элемент, тогда next был бы равен NULL.
Второй элемент так же имеет item и next который хранит адрес следующего элемента, previous который хранит адрес предыдущего элемента.
Вот по такой вот схеме мы будем работать при реализации List
.
2. Создание элемента очереди.
Создадим класс который будет называться Node.java
:
package com.devcolibri.list; public class Node<T> { private Node next; private Node previous; private T t; public Node() { this.next = null; this.previous = null; } public Node(Node previous) { this.next = null; this.previous = previous; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public Node getPrevious() { return previous; } public void setPrevious(Node previous) { this.previous = previous; } public T getT() { return t; } public void setT(T t) { this.t = t; } }
Node next
– тут мы будем хранить адрес следующего элемента коллекции;
Node previous
– тут мы будем хранить адрес предыдущего элемента коллекции;
T t
– это наш item;
int index
– тут индекс текущего элемента коллекции.
Теперь создадим класс который реализует интерфейс List
.
package com.devcolibri.list; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public class MyImplList<E> implements List<E> { private Node<E> node; private int size = 0; public MyImplList() { this.node = new Node<E>(); } @Override public int size() { return 0; } @Override public boolean isEmpty() { return false; } @Override public boolean contains(Object o) { return false; } @Override public Iterator<E> iterator() { return null; } @Override public Object[] toArray() { return new Object[0]; } @Override public <T> T[] toArray(T[] a) { return null; } @Override public boolean add(E e) { return false; } @Override public boolean remove(Object o) { return false; } @Override public boolean containsAll(Collection<?> c) { return false; } @Override public boolean addAll(Collection<? extends E> c) { return false; } @Override public boolean addAll(int index, Collection<? extends E> c) { return false; } @Override public boolean removeAll(Collection<?> c) { return false; } @Override public boolean retainAll(Collection<?> c) { return false; } @Override public void clear() { } @Override public E get(int index) { return null; } @Override public E set(int index, E element) { return null; } @Override public void add(int index, E element) { } @Override public E remove(int index) { return null; } @Override public int indexOf(Object o) { return 0; } @Override public int lastIndexOf(Object o) { return 0; } @Override public ListIterator<E> listIterator() { return null; } @Override public ListIterator<E> listIterator(int index) { return null; } @Override public List<E> subList(int fromIndex, int toIndex) { return null; } }
Хочу обратить ваше внимание на то что в данном примере мы просто указали что класс MyImplList
реализует List
, после чего мы определили все методы интерфейса List
который в следующей части реализуем.
Реализация интерфейса List . Часть 2
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
2 комментариев к статье "Реализация интерфейса List. Часть 1"
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Доброго времени суток, было бы здорово прикреплять ссылку на github чтобы можно было в один клик скачать исходники в maven + eclipse. Это супер удобно для новичков + для лентяев не делать лишние движения- оптимизация))
Доброе утро, было бы круто увидеть реализацию всех методов, и увидеть реализацию методов вот таких с вот такими параметрами:
void add(Object e);
void clear();
boolean remove(Object o);
boolean containsAll(List list);