summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2020-12-14 18:23:16 -0500
committerBen Culkin <scorpress@gmail.com>2020-12-14 18:23:16 -0500
commitdc8975149199c4e48b566ebb5051e4c45615e224 (patch)
tree0f343a399afdb08b59ce89abe3d392aa232cf50f /src/main/java
parent8e3df549064103a03917b193ed4369a9d50383c7 (diff)
Add ReverseListIterator
ReverseListIterator is a ListIterator which iterates over a given list in reverse, so that next()/prev() are essentially swapped.
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/bjc/data/ReverseListIterator.java72
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);
+ }
+}