implement java.util.TreeMap

This commit is contained in:
Joel Dice
2009-07-25 15:41:43 -06:00
parent 08e9a99cb5
commit d327f6ba5a
5 changed files with 341 additions and 66 deletions

View File

@ -10,7 +10,7 @@
package java.util;
public class TreeSet<T> extends AbstractSet<T> implements Collection<T> {
public class TreeSet<T> extends AbstractSet<T> implements Collection<T> {
private PersistentSet<Cell<T>> set;
private int size;
@ -49,34 +49,52 @@ public class TreeSet<T> extends AbstractSet<T> implements Collection<T> {
return false;
}
// Used by hashMaps for replacement
public void addAndReplace(T value) {
T addAndReplace(T value) {
PersistentSet.Path<Cell<T>> p = set.find(new Cell(value, null));
if (p.fresh()) {
set = p.add();
++size;
return null;
} else {
T old = p.value().value;
set = p.replaceWith(new Cell(value, null));
return old;
}
}
public boolean remove(Object value) {
T find(T value) {
PersistentSet.Path<Cell<T>> p = set.find(new Cell(value, null));
return p.fresh() ? null : p.value().value;
}
T removeAndReturn(T value) {
Cell<T> cell = removeCell(value);
return cell == null ? null : cell.value;
}
private Cell<T> removeCell(Object value) {
PersistentSet.Path<Cell<T>> p = set.find(new Cell(value, null));
if (p.fresh()) {
return false;
return null;
} else {
--size;
Cell<T> old = p.value();
if (p.value().next != null) {
set = p.replaceWith(p.value().next);
} else {
set = p.remove();
}
return true;
return old;
}
}
public boolean remove(Object value) {
return removeCell(value) != null;
}
public int size() {
return size;
}