@ Питер, безусловно, прав (черт возьми, за его быстрые пальцы), что вы должны рассмотреть возможность использования несинхронизированного класса для реализации этого, и что HashMap
лучше использовать.Я думал, что добавлю немного больше комментариев о вашем коде.
Если вы расширяете Map
, вам не нужно иметь internalDataStore
.Вы можете сделать что-то вроде:
class DataHash <K,V> extends HashMapK,V> {
private List<K> keyOrder = new ArrayList<K>();
@Override
public V put(K key, V value){
keyOrder.add(key);
return super.put(key, value);
}
// you don't need to implement the super class methods unless you need
// to keep keyOrder in sync
public V at(int index){
K key = this.keyOrder.get(index);
return get(key);
}
}
Нет известных мне классов Collection
, которые позволили бы вам получить доступ по индексу и по значению хеша.Ваша реализация должна работать нормально, если вы тщательно синхронизируете List
с картой.