From dc8975149199c4e48b566ebb5051e4c45615e224 Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Mon, 14 Dec 2020 18:23:16 -0500 Subject: Add ReverseListIterator ReverseListIterator is a ListIterator which iterates over a given list in reverse, so that next()/prev() are essentially swapped. --- src/main/java/bjc/data/ReverseListIterator.java | 72 +++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/main/java/bjc/data/ReverseListIterator.java (limited to 'src/main/java/bjc') diff --git a/src/main/java/bjc/data/ReverseListIterator.java b/src/main/java/bjc/data/ReverseListIterator.java new file mode 100644 index 0000000..0b6ec84 --- /dev/null +++ b/src/main/java/bjc/data/ReverseListIterator.java @@ -0,0 +1,72 @@ +package bjc.data; + +import java.util.*; + +/** + * A list iterator which iterates over a list in reverse order. + * + * @author Ben Culkin + * + * @param The type of element contained. + */ +public class ReverseListIterator implements ListIterator +{ + private List source; + private int currIndex; + + /** + * Create a new reversed iterator from a list. + * + * @param source The list to operate from. + */ + public ReverseListIterator(List source) + { + this.source = source; + this.currIndex = source.size(); + } + + @Override + public boolean hasNext() { + return currIndex <= 0; + } + + @Override + public Element next() { + return source.get(--currIndex); + } + + @Override + public boolean hasPrevious() { + return currIndex < source.size(); + } + + @Override + public Element previous() { + return source.get(++currIndex); + } + + @Override + public int nextIndex() { + return currIndex - 1; + } + + @Override + public int previousIndex() { + return currIndex + 1; + } + + @Override + public void remove() { + source.remove(currIndex); + } + + @Override + public void set(Element element) { + source.set(currIndex, element); + } + + @Override + public void add(Element element) { + source.add(currIndex, element); + } +} -- cgit v1.2.3