Відповідь Джон Скіт ефективно вирішує два сценарії (відображення зі nullзначенням, а не nullзначенням) ефективно.
Щодо кількості записів та ступеня ефективності, я хотів би щось додати.
У мене є HashMap з заявою 1.000 записів, і я дивлюсь на підвищення ефективності. Якщо доступ до HashMap доступний дуже часто, то перевірка наявності ключа при кожному доступі призведе до великих витрат.
Карта з 1.000 записами - це не величезна карта.
А також карта з 5.000 або 10.000 записами.
Mapпризначені для швидкого пошуку з такими розмірами.
Тепер він передбачає, що hashCode()клавіша карт забезпечує хороший розподіл.
Якщо ви можете використовувати Integerяк ключовий тип, зробіть це.
Його hashCode()метод є дуже ефективним, оскільки зіткнення неможливі для унікальнихint значень:
public final class Integer extends Number implements Comparable<Integer> {
...
@Override
public int hashCode() {
return Integer.hashCode(value);
}
public static int hashCode(int value) {
return value;
}
...
}
Якщо для ключа, ви повинні використовувати інший вбудований тип, Stringнаприклад, який часто використовується вMap вас можуть виникнути зіткнення, але від 1 тис. До декількох тисяч об'єктів, у Mapвас має бути дуже мало його як String.hashCode()методу забезпечує хороший розподіл.
Якщо ви користуєтеся власним типом, замініть hashCode()та equals()правильно та переконайтесь, що загальний рівень hashCode()забезпечує справедливий розподіл.
Ви можете звернутися до пункту 9 посилань на Java Effectiveнього.
Ось публікація, яка детально описує спосіб.