Відповідь Джон Скіт ефективно вирішує два сценарії (відображення зі 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
нього.
Ось публікація, яка детально описує спосіб.