Я вважаю , що це, принаймні частково, дозволяють об'єднувати containsKeyі getв один виклик. Якщо карта може містити нулі, немає способу визначити, чи getповертає нуль, тому що для цього значення не було ключа або просто тому, що значення було нульовим.
Чому це проблема? Тому що немає безпечного способу зробити це самостійно. Візьміть наступний код:
if (m.containsKey(k)) {
return m.get(k);
} else {
throw new KeyNotPresentException();
}
Оскільки mце паралельна карта, ключ k може бути видалений між викликами containsKeyта getвикликами, внаслідок чого цей фрагмент повертає нуль, який ніколи не був у таблиці, а не бажаний KeyNotPresentException.
Зазвичай ви вирішите це шляхом синхронізації, але з одночасною картою, що, звичайно, не буде працювати. Отже, підпис для getдовелося змінити, і єдиним способом зробити це за допомогою сумісного ззаду способу було запобігти користувачеві вводити в першу чергу нульові значення та продовжувати використовувати це як заповнювач для "ключа не знайдено".