package de.tud.inf.support;
import java.util.ArrayList;
import java.util.TreeMap;
import java.util.Map.Entry;
public class TreeMultiMap<K, V> {
protected TreeMap<K, ArrayList<V>> data;
public TreeMultiMap() {
data = new TreeMap<K, ArrayList<V>>();
}
public ArrayList<V> get(K key) {
return data.get(key);
}
public V getElement(K key, int index) {
return data.get(key).get(index);
}
public V put(K key, V value) {
if(data.containsKey(key) == false) {
data.put(key, new ArrayList<V>());
}
data.get(key).add(value);
return value;
}
public int size() {
return data.size();
}
public int totalSize() {
K currentKey = data.lastKey();
int size = 0;
if(currentKey != null) {
do {
size += data.get(currentKey).size();
//currentKey = data.higherKey(currentKey);
} while(currentKey != null);
}
return size;
}
public Entry<K, ArrayList<V>> lastEntry() {
//return data.lastEntry();
return null;
}
public K lastKey() {
return data.lastKey();
}
public Entry<K, ArrayList<V>> firstEntry() {
///return data.firstEntry();
return null;
}
public K firstKey() {
return data.firstKey();
}
public Entry<K, ArrayList<V>> higherEntry(K key){
//return data.higherEntry(key);
return null;
}
public K higherKey(K key) {
//return data.higherKey(key);
return null;
}
public Entry<K, ArrayList<V>> lowerEntry(K key){
//return data.lowerEntry(key);
return null;
}
public K lowerKey(K key) {
//return data.lowerKey(key);
return null;
}
public boolean remove(K key, V value) {
boolean ret_val = data.get(key).remove(value);
if(data.get(key).isEmpty()) {
data.remove(key);
}
return ret_val;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
K currentKey = data.lastKey();
do {
ArrayList<V> currentList = data.get(currentKey);
sb.append(currentKey);
sb.append(":");
sb.append(currentList);
sb.append("\n");
//currentKey = data.lowerKey(currentKey);
} while (currentKey != null);
return sb.toString();
}
}