Dziwne wyświetlanie elementów tablicy

0

Dlaczego gdy wyświetlam tablicę keyArray która została przekonwertowana z HashMap to wyświetla mi to w takiej kolejności:
Element nr 0: value: 4x4
Element nr 1: value: 4-1
Element nr 2: value: 2+2
Element nr 3: value: 25:5
Element nr 4: value: 3x0

a nie w jakiej zostało to podane w HashMap?

Map map=new <String> HashMap();
                map.put("2+2","4");
                map.put("4x4","16");
                map.put("3x0","0");
                map.put("4-1","3");
                map.put("25:5","5");

 Set <String> ex=  map.keySet();
             String[]  keyArray=ex.toArray(new String[ex.size()]);

1

HashMap nie trzyma kolejności elementów, kolejność jest losowa związana z hashcode kluczy. Jeśli chcesz zachować kolejność wkładania to użyj LinkedHashMap.
W bardziej ogólnym ujęciu, problem wynika z tego ze nie czytasz dokumentacji i wybierasz struktury danych na chybił trafił.

0

HashMap nie gwarantuje kolejności włożonych elementów (ba! może się nawet zmieniać w czasie życia obiektu), więc Set kluczy też nie będzie miał konkretnej kolejności, ani tym bardziej array zrobiony z tego setu.
Kolejność elementów w Hashmapie zależy od tego, do którego kubełka trafią, a to z kolei od hashcode klucza. Polecam poczytać na temat implementacji HashMapy
Z dokumentacji:

This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.

EDIT: Ehhhh, jestem zbyt wolny...

1 użytkowników online, w tym zalogowanych: 0, gości: 1