All pastes #182915 Raw Edit

Mine

public text v1 · immutable
#182915 ·published 2006-09-26 13:38 UTC
rendered paste body
package com.sumea.davinci.util.collections;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * This class extends the arraylist with methods to move elements
 * to various positions in the same list.
 *
 * @author Andreas Prudzilko
 */
public class DynamicList<E> extends ArrayList<E> {

    public DynamicList(int initialCapacity) {
        super(initialCapacity);
    }

    public DynamicList() {
    }

    public DynamicList(Collection<? extends E> c) {
        super(c);
    }

    /**
     * Moves an existing object in the list to a new index
     *
     * @param o
     * @param index
     */
    public void move(E o, int index) {
        move(indexOf(o), index);
    }

    /**
     * moves an object from old index to before the new index
     *
     * @param oldindex
     * @param newindex
     */
    public void move(int oldindex, int newindex) {
        if (oldindex == newindex) return;
        E o = get(oldindex);
        remove(o);
        if (newindex > oldindex) {
            newindex--;
        }
        add(newindex, o);
    }

    public void moveUp(int index) {
        if (index >= size() - 1) return;
        synchronized (this) {
            E o = get(index);
            E next = get(index + 1);

            set(index, next);
            set(index + 1, o);
        }
    }

    public void moveDown(int index) {
        if (index <= 0) return;
        synchronized (this) {
            E o = get(index);
            E prev = get(index - 1);
            set(index - 1, o);
            set(index, prev);
        }
    }

   	public Iterator<E> reverseIterator() {
		return new Iterator() {
			private int index = size() - 1;

			public boolean hasNext() {
				return index >= 0;
			}

			public void remove() {
			}

			public E next() {
				return get(index--);
			}
		};
	}

}