2013-07-10 3 views
0

Я следующий контейнер в C++:Параллельная модификация TreeMap в Java

std::unordered_map<keyType, std::map<otherKeyType, keyValue>::iterator> Container; 

Где-то в моем коде я использую этот контейнер для быстрого доступа к элементам в станде :: карта контейнере, и я могу одновременно изменять эту карту без любые проблемы и всегда мои итераторы действительны (я удаляю элементы с этой карты только в одном месте).

Я хочу воспроизвести это поведение на Java, но я знаю, что Java не имеет чего-то подобного в стандартном контейнере TreeMap.

Есть ли способ сохранить «быстрый путь» к некоторому элементу TreeMap, который пропустит логарифмический (по времени) поиск в этой TreeMap? Должен ли я каким-то образом использовать ссылки и создавать свой собственный контейнер, или есть какой-то вид или «волшебный контейнер», который будет соответствовать моим потребностям?

ответ

2

Эквивалент std::unordered_map в Java - это HashMap или ConcurrentHashMap, которые ожидали поиска по постоянному времени. A TreeMap - это упорядоченная карта

Если вам нужна упорядоченная карта, то splay tree может удовлетворить ваши потребности - более часто используемые объекты в дереве игрового процесса будут стремиться к вершине, что сокращает время поиска. Существует несколько реализаций Java, доступных через Google. Другим вариантом является сохранение кэша hashmap из последних элементов K, к которым вы обращались из treemap.

+0

Да, я это знаю. Дело в том, что эта «внутренняя карта» должна быть упорядоченной. Насколько я знаю, HashMaps не заказываются. – mdziekon

+0

@ Glibnes В этом случае см. Изменение к моему ответу выше –

+0

Хорошо, спасибо за это, но у меня есть еще один вопрос. Возможно ли реализовать упорядоченную карту и ее итераторы из C++ в Java с использованием ссылок или возможно только с указателями (и именно поэтому я могу сделать это на C++, но не на Java)? – mdziekon

Смежные вопросы