diff options
| author | Ben Culkin <scorpress@gmail.com> | 2020-12-14 18:23:16 -0500 |
|---|---|---|
| committer | Ben Culkin <scorpress@gmail.com> | 2020-12-14 18:23:16 -0500 |
| commit | dc8975149199c4e48b566ebb5051e4c45615e224 (patch) | |
| tree | 0f343a399afdb08b59ce89abe3d392aa232cf50f | |
| parent | 8e3df549064103a03917b193ed4369a9d50383c7 (diff) | |
Add ReverseListIterator
ReverseListIterator is a ListIterator which iterates over a given list
in reverse, so that next()/prev() are essentially swapped.
| -rw-r--r-- | src/main/java/bjc/data/ReverseListIterator.java | 72 |
1 files changed, 72 insertions, 0 deletions
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 <Element> The type of element contained. + */ +public class ReverseListIterator<Element> implements ListIterator<Element> +{ + private List<Element> source; + private int currIndex; + + /** + * Create a new reversed iterator from a list. + * + * @param source The list to operate from. + */ + public ReverseListIterator(List<Element> 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); + } +} |
