annotate src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/TreeMap/TreeMap.java @ 24:77681539d7c1 default tip

add get keys , keys return TreeMap key Iterator
author tatsuki
date Wed, 06 May 2015 06:16:05 +0900
parents aa30cf7adec2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.tatsuki.TreeMap;
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
2
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
3
20
3d9be68ef707 add checkDepth
tatsuki
parents: 19
diff changeset
4 import org.junit.Test;
3d9be68ef707 add checkDepth
tatsuki
parents: 19
diff changeset
5
24
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
6 import java.util.Iterator;
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
7 import java.util.Optional;
24
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
8 import java.util.Stack;
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
9
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
10
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
11 /**
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
12 * Created by e115731 on 15/03/23.
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
13 */
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
14 public class TreeMap<K, V> {
16
19dd02f1ee8e change getMethod and fix bug for emptyNode
tatsuki
parents: 13
diff changeset
15 final Node<K, V> root;
19dd02f1ee8e change getMethod and fix bug for emptyNode
tatsuki
parents: 13
diff changeset
16 final int size;
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
17
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
18 public TreeMap() {
4
3de906fb90d1 delete get
tatsuki
parents: 3
diff changeset
19 this.root = new EmptyNode();
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
20 this.size = 0;
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
21 }
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
22
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
23
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
24 public Node getRoot() {
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
25 return root;
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
26 }
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
27
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
28 public TreeMap(Node<K, V> root, int size) {
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
29 this.root = root;
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
30 this.size = size;
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
31 }
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
32
24
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
33 public Optional<V> get(final K key) {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
34 return root.get(key);
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
35 }
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
36
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
37 public TreeMap put(K key, V value) {
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
38
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
39 if (key == null || value == null) // null check
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
40 throw new NullPointerException();
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
41
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
42 if (isEmpty()) {
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
43 Node<K, V> newRoot = new BlackNode(key, value, new EmptyNode(), new EmptyNode());
16
19dd02f1ee8e change getMethod and fix bug for emptyNode
tatsuki
parents: 13
diff changeset
44 return new TreeMap<K, V>(newRoot, size + 1);
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
45 }
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
46
24
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
47 Node<K, V> newEntry = root.put((Comparable<? super K>) key, value);
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
48 Node<K, V> newRoot = new BlackNode(newEntry.getKey(), newEntry.getValue(), newEntry.left(), newEntry.right());
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
49 return new TreeMap(newRoot, 0);
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
50 }
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
51
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
52
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
53 public boolean isEmpty() {
16
19dd02f1ee8e change getMethod and fix bug for emptyNode
tatsuki
parents: 13
diff changeset
54 return !root.isNotEmpty();
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
55 }
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
56
9
5da70bcfb824 change delete method
tatsuki
parents: 8
diff changeset
57
24
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
58 public TreeMap<K, V> delete(K key) {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
59 Node node = null;
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
60 try {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
61 node = root.delete((Comparable<? super K>) key, null, Rotate.N);
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
62 } catch (RotateParent rotateParent) {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
63 }
6
710680857286 bag fix rebuildFour
tatsuki
parents: 5
diff changeset
64 if (node == null)
710680857286 bag fix rebuildFour
tatsuki
parents: 5
diff changeset
65 return this; // not key
13
b6739b88edeb create Tuple<Node,rebuildFlag>
tatsuki
parents: 9
diff changeset
66 if (!node.isNotEmpty())
24
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
67 return new TreeMap(new EmptyNode<>(), 0);
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
68 Node newRoot = new BlackNode(node.getKey(), node.getValue(), node.left(), node.right());
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
69 return new TreeMap(newRoot, 0);
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
70 }
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
71
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
72 public Iterator<K> keys() {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
73 return new Iterator<K>() {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
74 Stack<Node> nodeStack = new Stack();
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
75 Node currentNode = root;
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
76
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
77 @Override
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
78 public boolean hasNext() {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
79 return currentNode != null;
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
80 }
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
81
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
82 @Override
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
83 public K next() {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
84 K key = (K) currentNode.getKey();
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
85
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
86 if (currentNode.left().isNotEmpty()) {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
87 nodeStack.push(currentNode);
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
88 currentNode = currentNode.left();
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
89 return key;
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
90 } else if (currentNode.right().isNotEmpty()) {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
91 currentNode = currentNode.right();
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
92 return key;
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
93 } else if (nodeStack.isEmpty()) {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
94 currentNode = null;
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
95 return key;
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
96 }
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
97
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
98 do {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
99 currentNode = nodeStack.pop().right();
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
100 if (currentNode.isNotEmpty())
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
101 return key;
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
102
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
103 } while (!nodeStack.isEmpty());
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
104 return key;
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
105 }
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
106 };
5
6928ef8ba6f0 implement delete
tatsuki
parents: 4
diff changeset
107 }
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
108
20
3d9be68ef707 add checkDepth
tatsuki
parents: 19
diff changeset
109 @Test
24
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
110 public void checkDepth() {
77681539d7c1 add get keys , keys return TreeMap key Iterator
tatsuki
parents: 22
diff changeset
111 root.checkDepth(0, 0);
8
97225df15574 delete bag fix
tatsuki
parents: 7
diff changeset
112 System.out.println("-----------------------------------");
7
6c3147a90b56 minner change
tatsuki
parents: 6
diff changeset
113 }
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
114 }