Здравствуйте, Кодт, Вы писали:
GIV>>если хеш код не меняется то и порядок будет одинаковый
К>Тогда почему в исходном посте мы наблюдаем дребезг? Что является источником шума?
Условие
если хеш код не меняется. Если алгоритм хеша использует адрес объекта, рандом — что угодно что меняется от запуска к запуску то порядок может менятся.
Вот небольшой пример (тут HashSet но он внутри тот же HashMap):
class Main {
static class Test1 {
static final java.util.Random r = new java.util.Random();
final int val;
final int hash = r.nextInt();
public Test1(int v) {
this.val = v;
}
public String toString() {
return String.valueOf(val);
}
public int hashCode() {
return hash;
}
}
static class Test2 {
final int val;
public Test2(int v) {
this.val = v;
}
public String toString() {
return String.valueOf(val);
}
public int hashCode() {
return val;
}
}
public static void main(String[] args) {
var s1 = new java.util.HashSet<Test1>();
s1.add(new Test1(1));
s1.add(new Test1(2));
s1.add(new Test1(3));
var s2 = new java.util.HashSet<Test2>();
s2.add(new Test2(1));
s2.add(new Test2(2));
s2.add(new Test2(3));
System.out.println(s1); // порядок меняется так как меняются хеши
System.out.println(s2); // порядок стабильный так как хеши не меняются
}
}
потыкать тут
https://www.programiz.com/online-compiler/3iJdnEiLfPdE5
PS: писал в браузере и equals не реализовывал ибо влом, желающие могут реализовать и убедиться что особо не влияет