add sortChildren
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Mon, 26 May 2008 21:32:19 +0000 (23:32 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Mon, 26 May 2008 21:32:19 +0000 (23:32 +0200)
src/net/pterodactylus/util/data/Node.java
src/net/pterodactylus/util/data/NodeImpl.java
src/net/pterodactylus/util/data/Tree.java

index 560fc34..950ed99 100644 (file)
@@ -1,6 +1,7 @@
 
 package net.pterodactylus.util.data;
 
+import java.util.Comparator;
 import java.util.Iterator;
 
 /**
@@ -12,7 +13,7 @@ import java.util.Iterator;
  * @param <E>
  *            The type of the element to store
  */
-public interface Node<E> extends Iterable<Node<E>> {
+public interface Node<E extends Comparable<E>> extends Iterable<Node<E>>, Comparable<Node<E>> {
 
        /**
         * Returns the parent node of the node.
@@ -152,4 +153,17 @@ public interface Node<E> extends Iterable<Node<E>> {
         */
        public Node<E> findChild(E element);
 
+       /**
+        * Sorts all children according to their natural order.
+        */
+       public void sortChildren();
+
+       /**
+        * Sorts all children with the given comparator.
+        * 
+        * @param comparator
+        *            The comparator used to sort the children
+        */
+       public void sortChildren(Comparator<Node<E>> comparator);
+
 }
\ No newline at end of file
index 785fa1f..266cea1 100644 (file)
@@ -2,6 +2,8 @@
 package net.pterodactylus.util.data;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 
@@ -12,7 +14,7 @@ import java.util.List;
  * @param <E>
  *            The type of the element to store
  */
-class NodeImpl<E> implements Node<E> {
+class NodeImpl<E extends Comparable<E>> implements Node<E> {
 
        /** The parent node of this node. */
        private final Node<E> parentNode;
@@ -199,4 +201,29 @@ class NodeImpl<E> implements Node<E> {
                return null;
        }
 
+       /**
+        * {@inheritDoc}
+        */
+       public void sortChildren() {
+               Collections.sort(children);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public void sortChildren(Comparator<Node<E>> comparator) {
+               Collections.sort(children, comparator);
+       }
+
+       //
+       // INTERFACE Comparable
+       //
+
+       /**
+        * {@inheritDoc}
+        */
+       public int compareTo(Node<E> otherNode) {
+               return element.compareTo(otherNode.getElement());
+       }
+
 }
\ No newline at end of file
index 5cbb990..634b8f7 100644 (file)
@@ -27,7 +27,7 @@ package net.pterodactylus.util.data;
  * @param <E>
  *            The type of the element to store
  */
-public class Tree<E> {
+public class Tree<E extends Comparable<E>> {
 
        /** The root node of the tree. */
        private final Node<E> rootNode = new NodeImpl<E>();