A HashSet
come da documentazione non garantisce alcun concetto di ordine, quindi quello che stai vedendo potrebbe cambiare molto in un futuro aggiornamento di Java.
Tuttavia, se vi state chiedendo perché Java (a partire da ora) specifica implementazione del HashSet
produce il risultato che state vedendo: è perché le Integer
di valore 1
hash in una posizione nella tabella di entrata interna di un HashMap
che viene prima dello il luogo in cui si verificano gli hash 2
(si noti che uno HashSet
è realmente supportato da un valore HashMap
con valori arbitrari). Questo ha senso dal momento che il codice hash di un oggetto Integer
è solo il suo valore.
In realtà, si può vedere questo anche se si aggiunge ancora più numeri (entro un certo intervallo: la dimensione della tabella di entrata che è 16 per impostazione predefinita):
Set<Integer> set = new HashSet<>();
set.add(2);
set.add(1);
set.add(4);
set.add(3);
set.add(0);
System.out.println(set);
[0, 1, 2, 3, 4]
Iterazione nel corso di un HashSet
viene eseguito iterando sulla tabella di inserimento interna, il che significa che gli elementi precedenti nella tabella vengono prima.
Utilizzare più casi di test. Includere 20 numeri e vedere se il risultato è lo stesso. – JNL