Случайное получение элементов в HashMap или HashSet без цикла

У меня примерно 420 000 элементов, которые мне нужно легко сохранить в каком-либо наборе или списке. Однако ограничения заключаются в том, что мне нужно иметь возможность выбирать случайный элемент и что он должен быть быстрым.

Изначально я использовал ArrayList и LinkedList, однако с таким количеством элементов это было очень медленно. При его профилировании я увидел, что метод equals () в сохраняемом мной объекте был вызван примерно 21 миллион раз за очень короткий период времени.

Затем я попробовал HashSet.То, что я получаю от производительности, теряется в функциональности: я не могу выбрать случайный элемент. HashSet поддерживается HashMap, который поддерживается массивом объектов HashMap.Entry . Однако, когда я попытался раскрыть их, мне помешала сумасшедшая приватная и закрытая для пакетов видимость всей Java Collections Framework (даже копирование и вставка класса не сработали, JCF очень "Используйте то, что у нас есть, или сверните свое собственное"). ").

Как лучше всего случайным образом выбрать элемент, хранящийся в HashSet или HashMap? Из-за размера коллекции я бы предпочел не использовать цикл.

ВАЖНОЕ РЕДАКТИРОВАНИЕ: Я забыл действительно важную деталь: как именно я использую Коллекцию. Я заполняю всю Коллекцию по требованию стола. Во время программы я выбираю и удаляю случайный элемент, затем выбираю и удаляю еще несколько известных элементов, затем повторяю. Постоянный поиск и изменение - вот что вызывает медлительность

8
задан Henrik Aasted Sørensen 24 February 2014 в 09:48
поделиться