Java: сжатие HashMap (аналог ArrayList # trimToSize) - PullRequest
2 голосов
/ 13 октября 2011

Есть ли способ сжать HashMap в том смысле, в котором вы можете с помощью ArrayList через его метод trimToSize ()?

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

Есть ли лучший способ сделать это?

Ответы [ 2 ]

6 голосов
/ 13 октября 2011

Ну, вам не нужно проходить итерации вручную - вы можете просто использовать:

map = new HashMap<String, String>(map); // Adjust type arguments as necessary

Я верю, что это сделает всю итерацию за вас. возможно , что clone() сделает то же самое, но я не знаю точно.

В любом случае, я не верю, что вы ничего не упустили - я не думаю, что есть какой-либо способ выполнить операцию «обрезки» в текущем API. В отличие от ArrayList, такая операция в любом случае была бы достаточно сложной (как и расширение) - это не просто случай создания нового массива и выполнения одной копии массива. Записи должны быть перераспределены. Преимущество получения HashMap для самостоятельного выполнения этой операции, вероятно, заключается в том, что хэш-коды не нуждаются в повторной обработке.

0 голосов
/ 05 октября 2015

Если вы используете библиотеку trove , вместо этого она имеет поддержку хэш-карты и обрезки хэш-набора (см. Объект THashMap, компактный метод) и, что лучше всего, автоматически обрезается при удалении объектов, когда карта становится слишкомскудны.Это должно быть быстрее, чем создание новой карты, используя стандартную реализацию Java HashMap, поскольку (предположительно) она не должна переупорядочивать объекты в соответствии с их хэш-кодом, а может просто использовать порядок, который она уже знает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...