changeset 19:fae4951660b4

change compare
author tatsuki
date Wed, 29 Apr 2015 15:40:51 +0900
parents a02ce8467bad
children 3d9be68ef707
files src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/TreeMap/Node.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/TreeMap/TreeMap.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/test/TreeMapDelete.java
diffstat 3 files changed, 15 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/TreeMap/Node.java	Tue Apr 28 18:12:57 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/TreeMap/Node.java	Wed Apr 29 15:40:51 2015 +0900
@@ -25,23 +25,20 @@
         this.left = left;
     }
 
-    public void setRebuildFlag(boolean rebuildFlag) {
-        this.rebuildFlag = rebuildFlag;
-    }
-
     public Node<K, V> left() {
         return left;
     }
 
-    public int compare(K parentKey) {
-        return (parentKey.hashCode() - getKey().hashCode());
+    public int compare(Comparable<? super K> parentKey) {
+        return parentKey.compareTo(getKey());
+
     }
 
     public Optional<V> get(K key) {
         Node<K, V> cur = this;
-
+        Comparable<? super K> k = (Comparable<? super K>) key;
         while (cur.isNotEmpty()) {
-            int result = compare(key);
+            int result = cur.compare(k);
             if (result > 0)
                 cur = cur.right();
             else if (result < 0)
@@ -66,9 +63,11 @@
     }
 
 
-    public Node<K, V> put(K k, V value) {
+    public Node<K, V> put(Comparable<? super K> k, V value) {
+        if (!isNotEmpty()) {
+            return createNode((K)k, value, left, right);
+        }
         int result = compare(k);
-
         if (result > 0) {
             Node<K, V> node = right.put(k, value);
             node = createNode(key, this.value, left, node);
@@ -81,7 +80,7 @@
 
     }
 
-    public Node<K, V> delete(K key, Node<K, V> parent, Rotate side) throws RotateParent {
+    public Node<K, V> delete(Comparable<? super K> key, Node<K, V> parent, Rotate side) throws RotateParent {
         if (this.isNotEmpty()) {
             int result = compare(key);
 
@@ -128,7 +127,7 @@
         try {
             if (right().isNotEmpty()) {//最大値のノードが取得できるまで潜る
                 node = right().deleteSubTreeMaxNode(this, Rotate.R);
-              } else {
+            } else {
                 node = this.replaceNode(parent);
             }
         } catch (RotateParent e) {
@@ -148,7 +147,7 @@
 
     public Node deleteBalance(Node<K, V> parent) throws RotateParent {
         if (!isRed()) {
-            if (0 > compare(parent.getKey())) { //自身がどちらの子かを調べる
+            if (0 > compare((Comparable<? super K>) parent.getKey())) { //自身がどちらの子かを調べる
                 boolean rightChild = parent.left().right().isRed();
                 boolean leftChild = parent.left().left().isRed();
 
@@ -196,7 +195,7 @@
                 }
             }
         }
-        if (0 > (compare(parent.getKey())))
+        if (0 > (compare((Comparable<? super K>) parent.getKey())))
             return parent.createNode(parent.getKey(), parent.getValue(), parent.left(), this);
         else
             return parent.createNode(parent.getKey(), parent.getValue(), this, parent.right());
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/TreeMap/TreeMap.java	Tue Apr 28 18:12:57 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/TreeMap/TreeMap.java	Wed Apr 29 15:40:51 2015 +0900
@@ -38,7 +38,7 @@
             return new TreeMap<K, V>(newRoot, size + 1);
         }
 
-        Node<K, V> newEntry = root.put(key, value);
+        Node<K, V> newEntry = root.put((Comparable<? super K>)key, value);
         Node<K, V> newRoot = new BlackNode(newEntry.getKey(), newEntry.getValue(), newEntry.left(), newEntry.right());
         return new TreeMap(newRoot, 0);
     }
@@ -50,7 +50,7 @@
 
 
     public TreeMap<K,V> delete(K key) throws RotateParent {
-       Node node = root.delete(key, null,Rotate.N);
+       Node node = root.delete((Comparable<? super K>)key, null,Rotate.N);
         if (node == null)
             return this; // not key
         if (!node.isNotEmpty())
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/test/TreeMapDelete.java	Tue Apr 28 18:12:57 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/test/TreeMapDelete.java	Wed Apr 29 15:40:51 2015 +0900
@@ -22,7 +22,6 @@
         for (int i = 1; i < 3000; i++) {
             list.add(i);
         }
-
 //        test(map);
         Collections.shuffle(list);
         for (Integer num : list) {