Прежде всего, у вас есть понятие хэширования немного неправильно, и он был исправлен г-ном Санджаем.
И да, Java действительно реализует технику разрешения конфликтов. Когда два ключа получают хэшированные до одного и того же значения (поскольку используемый внутренний массив конечен по размеру, и в какой-то момент метод hashcode () возвращает одно и то же значение хэша для двух разных ключей) в это время связанный список формируется в ведре где вся информация вводится как объект Map.Entry, содержащий пару ключ-значение. Доступ к объекту с помощью ключа в худшем случае требует O (n), если запись присутствует в таких списках. Сравнение ключа, которое вы передали с каждым ключом в таком списке, будет выполняться методом equals ().
Хотя из Java 8 связанные списки заменяются деревьями (O (log n))
Невозможно запустить автозапуск в мобильных браузерах. (Это недопустимо)
Но некоторые трюки делают это.
Нажмите на ссылки ниже, чтобы просмотреть некоторые трюки
Вы можете воспроизводить звук с помощью API AudioContext
и брать источник из любого ArrayBuffer
(т. е. из XMLHttpRequest
или File
)
window.addEventListener('load', function () {
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var source = audioCtx.createBufferSource();
var xhr = new XMLHttpRequest();
xhr.open('GET', 'audio-autoplay.wav');
xhr.responseType = 'arraybuffer';
xhr.addEventListener('load', function (r) {
audioCtx.decodeAudioData(
xhr.response,
function (buffer) {
source.buffer = buffer;
source.connect(audioCtx.destination);
source.loop = false;
});
source.start(0);
});
xhr.send();
});
Работает на Chrome и Firefox как на мобильном, так и на рабочем столе
Важные замечания
Стоит упомянуть, IMO , что этот «трюк» может фактически рассматриваться как ошибка браузера и может перестать работать в любое время, если браузер решит, что это нарушает работу пользователя / становится широко используемым раздражением (например, объявлениями).
Также стоит упомянуть, что по крайней мере на моем мобильном телефоне и FF 54 звук будет воспроизводиться, даже если ваш телефон отключен ...
Также стоит отметить, что пользователь может установить autoplay
, чтобы соответствовать их пожеланиям и потребностям либо через обычные параметры браузера, либо через более продвинутую страницу about:config
(поведение autoplay
задается настройками Firefox media.autoplay.enabled
и media.block-autoplay-until-in-foreground
).
Так что форсирование звука autoplay
является плохой идеей UX независимо от того, как вы это делаете.