com.badlogic.gdx.utils.OrderedMap Maven / Gradle / Ivy
The newest version!
/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package com.badlogic.gdx.utils;
/** An {@link ObjectMap} that also stores keys in an {@link Array} using the insertion order. There is some additional overhead for
* put and remove. Iteration over the {@link #entries()}, {@link #keys()}, and {@link #values()} is ordered. Keys can also be
* accessed and the order changed using {@link #orderedKeys()}.
* @author Nathan Sweet */
public class OrderedMap extends ObjectMap {
final Array keys;
public OrderedMap () {
super();
keys = new Array();
}
public OrderedMap (int initialCapacity) {
super(initialCapacity);
keys = new Array(initialCapacity);
}
public OrderedMap (int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor);
keys = new Array(initialCapacity);
}
public V put (K key, V value) {
if (!containsKey(key)) keys.add(key);
return super.put(key, value);
}
public V remove (K key) {
keys.removeValue(key, false);
return super.remove(key);
}
public void clear () {
keys.clear();
super.clear();
}
public Array orderedKeys () {
return keys;
}
public Entries entries () {
return new Entries(this) {
void advance () {
nextIndex++;
hasNext = nextIndex < map.size;
}
public Entry next () {
entry.key = keys.get(nextIndex);
entry.value = map.get(entry.key);
advance();
return entry;
}
public void remove () {
map.remove(entry.key);
}
};
}
public Keys keys () {
return new Keys(this) {
void advance () {
nextIndex++;
hasNext = nextIndex < map.size;
}
public K next () {
K key = keys.get(nextIndex);
advance();
return key;
}
public void remove () {
map.remove(keys.get(nextIndex - 1));
}
};
}
public Values values () {
return new Values(this) {
void advance () {
nextIndex++;
hasNext = nextIndex < map.size;
}
public V next () {
V value = (V)map.get(keys.get(nextIndex));
advance();
return value;
}
public void remove () {
map.remove(keys.get(nextIndex - 1));
}
};
}
public String toString () {
if (size == 0) return "{}";
StringBuilder buffer = new StringBuilder(32);
buffer.append('{');
Array keys = this.keys;
for (int i = 0, n = keys.size; i < n; i++) {
K key = keys.get(i);
if (i > 0) buffer.append(", ");
buffer.append(key);
buffer.append('=');
buffer.append(get(key));
}
buffer.append('}');
return buffer.toString();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy