Was ist der Unterschied in der Hash-Map von Java 7 und Java 8, wenn beide mit einem Algorithmus mit konstanter Komplexität arbeiten? Nach meinem Verständnis sucht Hash-Karte in konstanter Zeit durch Erzeugen eines Hash-Schlüssels für ein Objekt durch Hash-Funktion.Unterschied in der Hash-Map in Java 7 und 8
Antwort
In Java 7 nach der Berechnung Hash von Hash-Funktion, wenn mehr als ein Element den gleichen Hash hat als sie durch lineare Suche gesucht werden, so ist es Komplexität ist (n). In Java 8 wird diese Suche durch binäre Suche durchgeführt, so dass die Komplexität log (n) wird. Dieses Konzept ist falsch, dass die Hash-Karte ein Objekt in konstanter Komplexität durchsucht, weil dies nicht immer der Fall ist.
Tatsächlich gibt es einen Schwellenwert, es wird in JEP180 beschrieben, wenn ein einzelner Bucket/Bin hat mehr als TREEIFY_THRESHOLD = 8 Einträge wird in einen Baum umgewandelt. In Java 7, wo Kollisionen linear durchsucht wurden, gab es einen DOS-Schutz: ein zufälliges Seed Xord mit den Hashes, um sie weniger vorhersagbar zu machen. Diese Funktion wurde in Java 8 entfernt. – eckes
Wenn wir in die Implementierung gehen, ist es genau das, was Sie @eckes erklärt haben – MDaniyal
Sie könnten die neuesten Ausgaben des Java Specialist newsletter sehr hilfreich finden. Es vertieft sich im Laufe der Jahre in Java über Hashing; Zum Beispiel weisen Sie darauf hin, dass Sie besser sicherstellen sollten, dass Ihre Map-Schlüssel Comparable implementieren (wenn Sie Java8 verwenden).
- 1. Java Wildcard Unterschied in 7 und 8
- 2. Java 8 HashMap KeySet() Ausgabe anders als Java 7
- 3. Wechsel zur HashMap Hash-Funktion in Java 8
- 4. Java 8 Lambda, Filter HashMap, Methode
- 5. Java 8: HashMap-Initialisierung mit Lambda-Ausdrücken
- 6. Java 8 | Parallel-Stream für eine HashMap
- 7. Unterstützt Tomcat 7 Java 8?
- 8. Java 7/8 Anfrage Parameter Größenbeschränkung
- 9. setzen/Get HashMap Komplexität in Java 8 JDK
- 10. Java 8 Leistung VS. Java 7
- 11. Warum funktioniert isAnnotationPresent zwischen Java 7 und Java 8 anders?
- 12. Kollisionsauflösung in Java HashMap
- 13. Java 8: Was ist der Unterschied zwischen Instant und LocalDateTime?
- 14. Einschränkung in HashMap Java
- 15. Kopieren einer HashMap in Java
- 16. getDeclaredMethods() anders in Java 7 vs. Java 8
- 17. CSS-Mindestbreite in IE6, 7 und 8
- 18. Was ist der Unterschied zwischen einer HashMap und einer TreeMap?
- 19. Java 8 hashmap Implementierung mit TreeNode anstelle von VerketteteListe
- 20. Worin besteht der Unterschied? und Objekt in Java-Generics?
- 21. Unterschied in der Ausgabe - Java
- 22. Unterschied zwischen Java EE 7 und Java EE 6
- 23. Was ist der Unterschied zwischen HashMap und HashMultimap
- 24. Java 7 in Eclipse programmieren
- 25. Java-Streams in Java 7
- 26. Unterschied zwischen offer() und add() in der Prioritätswarteschlange in Java?
- 27. Java 7 Alternative zu Standardmethoden in der Schnittstelle (nur in Java 8)
- 28. Java Hashmap/Hashtable und Nummerierung
- 29. Java 8 Stream in der Hauptmethode
- 30. Java setzen HashMap in Treemap
@MDaniyal antwortete richtig, ohne die Phrase zu verwenden, die die Situation von zwei oder mehr Elementen mit dem gleichen Hash beschreibt: "Hash-Kollision." Wenn Sie generell Hash-Kollisionen genauer betrachten wollen, empfehle ich hier zu beginnen: https://en.wikipedia.org/wiki/Hash_table#Collision_resolution – Jeutnarg