# HG changeset patch # User tatsuki # Date 1430289651 -32400 # Node ID fae4951660b4cdea11ee1c38638b5e5cb73bca52 # Parent a02ce8467bad101cd431ee4956fa9ee1cceff0a1 change compare diff -r a02ce8467bad -r fae4951660b4 src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/TreeMap/Node.java --- 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 left() { return left; } - public int compare(K parentKey) { - return (parentKey.hashCode() - getKey().hashCode()); + public int compare(Comparable parentKey) { + return parentKey.compareTo(getKey()); + } public Optional get(K key) { Node cur = this; - + Comparable k = (Comparable) 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 put(K k, V value) { + public Node put(Comparable k, V value) { + if (!isNotEmpty()) { + return createNode((K)k, value, left, right); + } int result = compare(k); - if (result > 0) { Node node = right.put(k, value); node = createNode(key, this.value, left, node); @@ -81,7 +80,7 @@ } - public Node delete(K key, Node parent, Rotate side) throws RotateParent { + public Node delete(Comparable key, Node 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 parent) throws RotateParent { if (!isRed()) { - if (0 > compare(parent.getKey())) { //自身がどちらの子かを調べる + if (0 > compare((Comparable) 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) parent.getKey()))) return parent.createNode(parent.getKey(), parent.getValue(), parent.left(), this); else return parent.createNode(parent.getKey(), parent.getValue(), this, parent.right()); diff -r a02ce8467bad -r fae4951660b4 src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/TreeMap/TreeMap.java --- 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(newRoot, size + 1); } - Node newEntry = root.put(key, value); + Node newEntry = root.put((Comparable)key, value); Node newRoot = new BlackNode(newEntry.getKey(), newEntry.getValue(), newEntry.left(), newEntry.right()); return new TreeMap(newRoot, 0); } @@ -50,7 +50,7 @@ public TreeMap delete(K key) throws RotateParent { - Node node = root.delete(key, null,Rotate.N); + Node node = root.delete((Comparable)key, null,Rotate.N); if (node == null) return this; // not key if (!node.isNotEmpty()) diff -r a02ce8467bad -r fae4951660b4 src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/test/TreeMapDelete.java --- 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) {