Qual è la differenza in Hash Map di Java 7 e Java 8 quando entrambi funzionano su un algoritmo di complessità costante? Secondo quanto ho capito, ho cercato le mappe hash in tempo costante generando una chiave hash per un oggetto attraverso la funzione hash.Differenza nella mappa hash in Java 7 e 8
risposta
In Java 7 dopo il calcolo di hash da funzione hash se più di un elemento ha stesso hash che vengono cercati da ricerca lineare quindi è complessità è (n). In Java 8 la ricerca viene eseguita dalla ricerca binaria, quindi la complessità diventerà log (n). Quindi, questo concetto è sbagliato che la mappa di hash cerca un oggetto in costante complessità perché non è sempre il caso.
In realtà c'è una soglia, È descritta in JEP180, quando un singolo bucket/bin ha più di TREEIFY_THRESHOLD = 8 voci che saranno convertite in un albero. In Java 7, dove le collisioni sono state ricercate linearmente, c'era una protezione DOS: un Xord seme casuale con gli hash per renderli meno prevedibili. Questa funzione è stata rimossa in Java 8. – eckes
Se approfondiamo l'implementazione, è esattamente quello che hai spiegato @eckes – MDaniyal
si potrebbe trovare gli ultimi numeri del Java Specialist newsletter molto utile. Si approfondisce discutendo dell'hashing in Java nel corso degli anni; ad esempio sottolineando che è meglio assicurarsi che le chiavi della mappa implementino Comparable (quando si utilizza Java8).
- 1. Differenza tra mappa e dict
- 2. Java 8: espressioni lambda Mappa
- 3. Mappa con get() veloce e costante per Java 7
- 4. Visualizzazione problemi nella mappa di hash
- 5. Prestazioni Java 8 VS. Java 7
- 6. Mappare un elenco per Mappa Java 8 torrente e groupingBy
- 7. Java 8 - Differenza tra Optional.flatmap e Optional.map
- 8. Passare alla funzione di hash HashMap in Java 8
- 9. Differenza tra Java EE 7 e Java EE 6
- 10. Differenza tra hash vuoto e no hash
- 11. java 8 - torrente, la mappa e il conteggio distinto
- 12. Java 8 lista alla mappa annidata
- 13. Differenza tra flusso() map() e stream.map ({}) in Java 8
- 14. Java 8 modifica in decodifica UTF-8
- 15. Differenza tra mappa e mappaAsync
- 16. In Java, mappa sorta di hash per la sua key.length()
- 17. Come convertire la mappa in elenco in Java 8
- 18. Oracle Java 7-8 Hotspot VM
- 19. Differenza tra hash() e id()
- 20. java streams in Java 7
- 21. Differenza tra mapValues e trasformazione in Mappa
- 22. Avviso MaxPermSize in Eclipse WildFly 8 e Java 8
- 23. Java 7 Debug su Windows 8 non funzionante
- 24. java 8: differenza tra class.getName() e String letterale
- 25. È un errore concettuale utilizzare "funzione" di termine anziché "metodo" in java 7 e java 8?
- 26. Perché isAnnotationPresent funziona in modo diverso tra Java 7 e Java 8?
- 27. Java 8: Qual è la differenza tra Instant e LocalDateTime?
- 28. Differenza tra flussi java 8 e flussi paralleli
- 29. mappa Groovy e mappa Java su generici
- 30. Utilizzo di Java 8 Facoltativo per l'attraversamento sicuro della mappa
@MDaniyal ha risposto correttamente senza utilizzare la frase che descrive la situazione di due o più elementi con lo stesso hash: "collisione di hash". Se vuoi approfondire le collisioni di hash in generale, ti consiglio di iniziare qui: https://en.wikipedia.org/wiki/Hash_table#Collision_resolution – Jeutnarg