diff --git a/classpath/java/util/ArrayList.java b/classpath/java/util/ArrayList.java index 3589f648ca..c069cb116a 100644 --- a/classpath/java/util/ArrayList.java +++ b/classpath/java/util/ArrayList.java @@ -154,4 +154,8 @@ public class ArrayList implements List { public Iterator iterator() { return new Collections.ArrayListIterator(this); } + + public ListIterator listIterator(int index) { + return new Collections.ArrayListIterator(this, index); + } } diff --git a/classpath/java/util/Collections.java b/classpath/java/util/Collections.java index 732df1f706..bbc4e60b3f 100644 --- a/classpath/java/util/Collections.java +++ b/classpath/java/util/Collections.java @@ -102,13 +102,31 @@ public class Collections { } } - static class ArrayListIterator implements Iterator { + static class ArrayListIterator implements ListIterator { private final List list; private boolean canRemove = false; - private int index = -1; + private int index; public ArrayListIterator(List list) { + this(list, 0); + } + + public ArrayListIterator(List list, int index) { this.list = list; + this.index = index - 1; + } + + public boolean hasPrevious() { + return index >= 0; + } + + public T previous() { + if (hasPrevious()) { + canRemove = true; + return list.get(index--); + } else { + throw new NoSuchElementException(); + } } public T next() { diff --git a/classpath/java/util/ListIterator.java b/classpath/java/util/ListIterator.java new file mode 100644 index 0000000000..126a00b716 --- /dev/null +++ b/classpath/java/util/ListIterator.java @@ -0,0 +1,6 @@ +package java.util; + +public interface ListIterator extends Iterator { + public boolean hasPrevious(); + public E previous(); +}