package loon.utils;
public class TArrayValueMap<K, V> {
private final ObjectMap<K, V> map;
private final TArray<V> values;
private final TArray<K> tmpKeyArray;
public TArrayValueMap() {
this(16);
}
public TArrayValueMap(int capacity) {
map = new ObjectMap<>(capacity);
values = new TArray<>(true, capacity);
tmpKeyArray = new TArray<>(capacity);
}
public void put(K key, V value) {
map.put(key, value);
values.add(value);
}
public V get(K key) {
return map.get(key);
}
public boolean contains(K key) {
return map.containsKey(key);
}
public V getValueAt(int valueIndex) {
return values.get(valueIndex);
}
public V remove(K key) {
V value = map.remove(key);
if (value != null) {
values.removeValue(value, true);
}
return value;
}
public V removeByValue(V value) {
K key = findKey(value);
return remove(key);
}
public K findKey(V value) {
for (ObjectMap.Entry<K, V> entry : map.entries()) {
if (entry.value == value) {
return entry.key;
}
}
return null;
}
public void clear() {
map.clear();
values.clear();
}
public int size() {
return map.size();
}
public TArray<V> getValues() {
return values;
}
public TArray<K> getKeys() {
TArray<K> result = tmpKeyArray;
result.clear();
for (K key : map.keys()) {
result.add(key);
}
return result;
}
}