Почему в ХэшМАПе байты отсортированы?
добавляю байты в мапу таким образом:
while (fileInputStream.available() > 0)
{
data = fileInputStream.read();
if (!map.containsKey(data)){
map.put(data,1);
} else {map.put(data,map.get(data) + 1);}
}
вывожу мапу
for(Map.Entry<Integer, Integer> item : map.entrySet()){
System.out.printf("Key: %s Value: %s \n", item.getKey(), item.getValue());
}
получаю:
Key: 49 Value: 1
Key: 51 Value: 3
Key: 52 Value: 1
Key: 53 Value: 1
Key: 54 Value: 3
в самом файле написанно : 166346533
как видно ключи отсортированы по битам но не пойму почему, я думал в хешмап оно добавляется хаотично
Oleh Makarenko
19 уровень
Почему в ХэшМАПе байты отсортированы?
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Wladyslaw Java Developer Master
7 июня 2020, 10:47решение
Не хаотично, а в бакеты, по индексу, который считается исходя из хэша объекта.
Просто тут так вышло что все в один бакет лягло.
Просто совпадение.
Например, вот так уже не будет никакого порядка
{64=1, 65=1, 66=1, 67=1, 68=1, 69=1, 70=1, 71=1, 72=1, 73=1, 74=1, 75=1, 76=1, 77=1, 78=1, 79=1, 80=1, 81=1, 82=1, 83=1, 84=1, 45=1, 46=1, 47=1, 48=1, 49=1, 50=1, 51=1, 52=1, 53=1, 54=1, 55=1, 56=1, 57=1, 58=1, 59=1, 60=1, 61=1, 62=1, 63=1}
Хэшмапа не гарантирует какой либо порядок да, но это же не значит что она гарантирует его отсутствие
+2
Oleh Makarenko
7 июня 2020, 10:56
все равно не понимаю, когда просто интеджеры добавлять а хешмап, то да, они не по порядку добавляются, но когда я считываю файл по байтам то байты в хешмап или в хешсет добавляются по порядку
0
Wladyslaw Java Developer Master
7 июня 2020, 10:59полезный
Что интеджеры что байты не по порядку добавляются - а по индеску бакета.
Не важно как ты добавляешь, по порядку или нет. Он при каждом добавлении считает индекс и кладет объект в бакет по индексу.
Дадут одинаковый вывод
{65=1, 66=1, 67=1, 68=1, 69=1, 70=1, 71=1, 72=1, 73=1, 74=1}
{65=1, 66=1, 67=1, 68=1, 69=1, 70=1, 71=1, 72=1, 73=1, 74=1}
+1
Oleh Makarenko
7 июня 2020, 11:04
кажется чуть понял, я добавил больше символов в файл и уже добавляется не по порядку
0