@@ -81,28 +81,23 @@ public int size() {
81
81
}
82
82
83
83
/**
84
- * Removes the given element, the internal data structure will not be changed - queries will
85
- * therefore not be faster .
84
+ * Adds the given element, the internal data structure will not be changed - query performance
85
+ * will suffer .
86
86
*/
87
87
@ Override
88
- public boolean remove (Object o ) {
88
+ public boolean add (U u ) {
89
+ Node node = findNodeFor (u );
90
+ Object [] newValues = Arrays .copyOf (node .values , node .values .length + 1 );
91
+ newValues [node .values .length ] = u ;
92
+ node .values = newValues ;
93
+ return true ;
94
+ }
95
+
96
+ private Node findNodeFor (Object o ) {
89
97
Node current = root ;
90
98
boolean xDim = true ;
91
99
while (current != null ) {
92
- if (current .values != null && current .values .length > 0 ) {
93
- Object [] replacement = new Object [current .values .length - 1 ];
94
- int i ;
95
- for (i = 0 ; i < replacement .length && !Objects .equals (current .values [i ], o ); i ++) {
96
- replacement [i ] = current .values [i ];
97
- }
98
- if (i == replacement .length ) return false ;
99
- for (; i < replacement .length ; i ++) {
100
- replacement [i ] = current .values [i + 1 ];
101
- }
102
- current .values = replacement ;
103
- size --;
104
- return true ;
105
- }
100
+ if (current .values != null ) return current ;
106
101
Position pos = positionExtractor .apply ((U ) o );
107
102
if (xDim && pos .x <= current .p || !xDim && pos .y <= current .p ) {
108
103
current = current .left ;
@@ -111,6 +106,30 @@ public boolean remove(Object o) {
111
106
}
112
107
xDim = !xDim ;
113
108
}
109
+ throw new IllegalStateException ("No node with values found!" );
110
+ }
111
+
112
+ /**
113
+ * Removes the given element, the internal data structure will not be changed - queries will
114
+ * therefore not be faster.
115
+ */
116
+ @ Override
117
+ public boolean remove (Object o ) {
118
+ Node node = findNodeFor (o );
119
+ if (node .values .length > 0 ) {
120
+ Object [] replacement = new Object [node .values .length - 1 ];
121
+ int i ;
122
+ for (i = 0 ; i < replacement .length && !Objects .equals (node .values [i ], o ); i ++) {
123
+ replacement [i ] = node .values [i ];
124
+ }
125
+ if (i == replacement .length ) return false ;
126
+ for (; i < replacement .length ; i ++) {
127
+ replacement [i ] = node .values [i + 1 ];
128
+ }
129
+ node .values = replacement ;
130
+ size --;
131
+ return true ;
132
+ }
114
133
return false ;
115
134
}
116
135
0 commit comments