Как я понимаю массивы в js хранятся как хэш-таблицы. У хэш-табицы сложность поиска в среднем O(1) (https://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88-%... Тогда почему же indexOf реализован методом перебора? Где можно подробнее прочитать про то как храняться массивы и работает память?
Тогда странно обращение называть поиском. Получается, что в худшем случае, чтобы обратиться к элементу в хэш-таблице может потребоваться O(n). И чтоб вставить или удалить элемент в хэш-таблице также потребуется O(n) (в худшем случае).
Из этого возникает вопрос тогда, чем хэш-таблица лучше массива? В массиве же мы стабильно получали бы O(1) при обращении к элементу.
Иса, в массиве индексы - положительные целые числа от 0 до N-1. В то время, как в хэш-таблице индексы могут быть любыми, и не обязательно вообще числами.
SagePtr, это я понимаю, но я имел в виду в плане производительности и тд. Возможность иметь индексы нечисла, слабое преимущество. Я понимаю, что раз придумали хэш-таблицы, значит смысл в них есть)) Просто хотелось понять все аспекты.
Иса, с чего это вдруг "слабое преимущество"? Если вам нужно хранить не список однотипных безымянных элементов, то как раз в качестве индексов очень часто используют не порядковые номера, а что-нибудь более осмысленное.
Разве что хранить обратную хэш-таблицу, где индексами являются значения элементов, а значениями - их индексы. Но это уже извращение, в некоторых задачах может применяться, где нужен быстрый поиск по огромным объёмам информации, но в большинстве - эти несколько милисекунд не стоят затрат на разработку, отладку и сопровождение этого костыля)