diff options
Diffstat (limited to 'src/de/animux/android/andmal/util/SortedLinkedList.java')
-rw-r--r-- | src/de/animux/android/andmal/util/SortedLinkedList.java | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/de/animux/android/andmal/util/SortedLinkedList.java b/src/de/animux/android/andmal/util/SortedLinkedList.java new file mode 100644 index 0000000..974d3e5 --- /dev/null +++ b/src/de/animux/android/andmal/util/SortedLinkedList.java @@ -0,0 +1,40 @@ +package de.animux.android.andmal.util; + +import java.util.Collection; +import java.util.LinkedList; +import java.util.ListIterator; + +public class SortedLinkedList<T extends Comparable<T>> extends LinkedList<T> { + + private static final long serialVersionUID = 8263372892230475461L; + + @Override + public boolean add(T object) { + ListIterator<T> it = listIterator(); + while (it.hasNext()) { + if (object.compareTo(it.next()) > 0) { + break; + } + } + + if (it.hasPrevious()) { + it.previous(); + it.add(object); + } + else { + // insert at first position + listIterator().add(object); + } + + return true; + } + + @Override + public boolean addAll(Collection<? extends T> collection) { + for (T object : collection) { + add(object); + } + + return true; + } +} |