Реализация интерфейса List. Часть 1

В этой серии статей я продемонстрирую один из способов реализации интерфейса 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

Урок создан: 08 ноября 2012 | Просмотров: 15663 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии:

Комментариев пока нет, будьте первым.