Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as Java by andrey ( 13 years ago )
package lab8;

import java.io.Serializable;

import interfaces.task8.CyclicCollection;
import interfaces.task8.CyclicItem;

/**
 * 
 * Implementation for CyclicCollection interface
 * 
 * @author sukhovey
 * 
 */
public class CyclicCollectionImpl implements CyclicCollection, Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 2746019779793098054L;
    private CyclicItem first;
    private int size = 0;

    @Override
    public boolean add(CyclicItem item) {
        if (item == null) {
            throw new NullPointerException();
        }

        if (first == null) {
            first = item;
            first.setNextItem(item);
            size++;
            return true;
        }
        if (first == item) {
            throw new IllegalArgumentException(
                    "The element is already in collection");
        }

        CyclicItem temp = first;

        // iterate all elements in collection to check if one of them equals to
        // item
        while (temp.nextItem() != first) {
            if (temp.nextItem() == item) {
                throw new IllegalArgumentException(
                        "The element is already in collection");
            }
            temp = temp.nextItem();
        }

        temp.nextItem().setNextItem(item);
        item.setNextItem(first);
        size++;
        return true;
    }

    @Override
    public CyclicItem getFirst() {
        return first;
    }

    @Override
    public void insertAfter(CyclicItem item, CyclicItem newItem) {
        if (item == null || newItem == null) {
            throw new NullPointerException();
        }

        // check if newItem already is in collection and find item
        if (size == 0) {
            throw new IllegalArgumentException(
                    "Collection does not contain item");
        }

        if (size == 1) {
            if (first == item) {
                add(newItem);
            } else
                throw new IllegalArgumentException(
                        "Collection does not contain item");
        }

        boolean itemIsInCollection = false;
        CyclicItem temp = first;
        do {
            if (temp == newItem) {
                throw new IllegalArgumentException(
                        "The element is already in collection");
            }
            if (temp == item) {
                itemIsInCollection = true;
            }
            temp = temp.nextItem();
        } while (temp != first);

        if (!itemIsInCollection) {
            throw new IllegalArgumentException(
                    "Collection does not contain item");
        }

        newItem.setNextItem(item.nextItem());
        item.setNextItem(newItem);
        size++;
    }

    @Override
    public boolean remove(CyclicItem item) {
        if (item == null) {
            throw new NullPointerException();
        }
        if (size == 0) {
            return false;
        }

        if ((first == item) & (size == 1)) {
            first = null;
            size--;
            return true;
        }

        // start element for item search
        CyclicItem temp = first.nextItem();

        // variable containing previous element to current element during item
        // search
        CyclicItem prev = first;
        do {
            if (temp == item) {
                if (temp == first) {
                    first = temp.nextItem();
                }
                prev.setNextItem(temp.nextItem());
                size--;
                return true;
            }
            prev = temp;
            temp = temp.nextItem();

        } while (temp != first.nextItem());

        return false;
    }

    @Override
    public int size() {
        return size;
    }

}

 

Revise this Paste

Your Name: Code Language: